Как убрать зависшие сеансы на сервере 1С:Предприятие?

Системный администратор 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Зависшие сеансы в 1С — это классическая проблема, с которой сталкивается практически каждый системный администратор или специалист по сопровождению. Фантомные пользователи не только занимают лицензии, но и мешают выполнению регламентных операций, таких как выгрузка базы данных в формат .dt, обновление конфигурации или создание резервных копий. В этой статье мы подробно разберем, почему возникают такие ситуации и какими методами можно эффективно очистить сервер от "призраков".

Причины возникновения зависших соединений

Прежде чем переходить к радикальным мерам, давайте проанализируем, почему сеанс может "зависнуть". Чаще всего это происходит из-за некорректного разрыва сетевого соединения между клиентом и сервером. Например, у пользователя пропал интернет, выключился компьютер или произошел сбой в работе самого клиентского приложения 1cv8.exe. Сервер 1С продолжает считать, что клиент активен, и удерживает соединение, блокировки и лицензию.

Способ 1: Использование консоли администрирования кластера

Первым делом мы всегда заходим в консоль администрирования 1С. Рассмотрим стандартный алгоритм действий:

  1. Открываем дерево консоли, переходим в раздел "Сеансы".
  2. Находим проблемные сеансы (ориентируемся по времени начала, активности или имени компьютера).
  3. Пытаемся удалить сеанс через контекстное меню.

Важно: Если обычное удаление не помогает и сеанс остается в списке "блокировок", значит, процесс rphost.exe на сервере все еще удерживает это соединение. В этом случае переходим к более жестким методам.

Способ 2: Перезапуск службы Агента сервера 1С

Как показывает практика, это самый надежный способ "одним махом" решить проблему. Мы можем выполнить это через стандартную оснастку Windows:

  1. Откройте "Службы" (services.msc).
  2. Найдите службу Агент сервера 1С:Предприятие.
  3. Нажмите "Перезапустить".

Проанализируем последствия: этот метод мгновенно разрывает все соединения всех пользователей во всех базах данного кластера. Если на сервере работает много людей, этот вариант лучше оставить на нерабочее время.

Способ 3: Точечное завершение процессов rphost и rmngr

Если мы не хотим перезапускать всю службу, можно попробовать завершить конкретный рабочий процесс. Разберем разницу между ними:

Посмотрим на ситуацию: в консоли 1С можно увидеть, на каком именно rphost (по номеру порта или ID) висит пользователь. Завершение именно этого процесса позволит выкинуть только часть пользователей, а не всех сразу.

Способ 4: Автоматизация очистки (Windows Batch)

Для профилактики многие администраторы используют скрипты, которые запускаются по расписанию (например, ночью). Разберем пример простого .bat файла для перезапуска службы:


net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
timeout /t 10 /nobreak
taskkill /f /im rphost.exe
taskkill /f /im rmngr.exe
taskkill /f /im ragent.exe
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

В данном примере мы сначала корректно останавливаем службу, затем принудительно "добиваем" оставшиеся процессы (если они зависли при остановке) и запускаем службу заново.

Способ 5: Глубокая очистка на Linux (Ubuntu)

Если ваш сервер 1С работает под управлением Linux, мы можем использовать более продвинутые скрипты для очистки кэша и завершения сеансов. Рассмотрим пример скрипта для cron:


# Останавливаем все службы 1С
systemctl stop srv1cv8* -all > /dev/null

# Удаляем файлы с давностью 60+ дней в каталогах кластеров
find /home/usr1cv8/.1cv8/1C/*/reg_*/*/* -type f -mtime +60 -exec rm -f {} + > /dev/null

# Удаляем временную информацию о сеансах (snccntx)
rm -rf /home/usr1cv8/.1cv8/1C/*/reg_*/snccntx*/* > /dev/null

# Чистим временные каталоги и кэш
rm -rf /tmp/* > /dev/null
rm -rf /tmp_1c/*/* > /dev/null

# Запускаем службы обратно
systemctl start srv1cv8* -all > /dev/null

Этот скрипт не просто перезапускает сервер, но и вычищает директории snccntx, где хранится информация о контексте сеансов. Это гарантирует, что после запуска ни один "призрак" не вернется.

Способ 6: Настройка параметров кластера (Превентивная мера)

Чтобы сеансы не зависали в будущем, мы можем настроить сам кластер 1С на автоматическую очистку. Проанализируем ключевые параметры в свойствах кластера:

Эти настройки позволяют серверу 1С самостоятельно "подметать" забытые подключения без вашего участия.

Способ 7: Разрыв соединений на уровне СУБД

Иногда 1С не может закрыть сеанс, потому что он "намертво" заблокирован на уровне базы данных (SQL). В таком случае выясним причину на стороне СУБД:

Для MS SQL Server: используйте консоль SQL Server Management Studio. Через "Activity Monitor" найдите процесс (SPID), связанный с базой 1С, и выполните команду KILL [номер_процесса].

Для PostgreSQL: выполните SQL-запрос для поиска и завершения процесса:


SELECT pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE datname = 'имя_вашей_базы' AND state = 'idle';

Это принудительно разорвет соединение со стороны базы данных, и сервер 1С вскоре поймет, что сеанс больше не валиден.

Дополнительные рекомендации

Если зависания происходят регулярно при выгрузке .dt, обратите внимание на работу антивируса на сервере. Рекомендуется добавить в исключения не только исполняемые файлы rphost.exe, rmngr.exe, но и рабочую директорию сервера (обычно это C:\Program Files\1cv8\srvinfo). Часто именно антивирусная проверка временных файлов блокирует механизмы самоочистки 1С, что приводит к появлению "фантомов".

Также стоит рассмотреть внедрение утилиты RAC (Remote Administration Console). С ее помощью можно написать PowerShell-скрипт, который будет находить сеансы со статусом "Sleeping" и завершать их точечно, не затрагивая работу всего предприятия.

← На главную