Зависшие сеансы в 1С — это классическая проблема, с которой сталкивается практически каждый системный администратор или специалист по сопровождению. Фантомные пользователи не только занимают лицензии, но и мешают выполнению регламентных операций, таких как выгрузка базы данных в формат .dt, обновление конфигурации или создание резервных копий. В этой статье мы подробно разберем, почему возникают такие ситуации и какими методами можно эффективно очистить сервер от "призраков".
Прежде чем переходить к радикальным мерам, давайте проанализируем, почему сеанс может "зависнуть". Чаще всего это происходит из-за некорректного разрыва сетевого соединения между клиентом и сервером. Например, у пользователя пропал интернет, выключился компьютер или произошел сбой в работе самого клиентского приложения 1cv8.exe. Сервер 1С продолжает считать, что клиент активен, и удерживает соединение, блокировки и лицензию.
Первым делом мы всегда заходим в консоль администрирования 1С. Рассмотрим стандартный алгоритм действий:
Важно: Если обычное удаление не помогает и сеанс остается в списке "блокировок", значит, процесс rphost.exe на сервере все еще удерживает это соединение. В этом случае переходим к более жестким методам.
Как показывает практика, это самый надежный способ "одним махом" решить проблему. Мы можем выполнить это через стандартную оснастку Windows:
Проанализируем последствия: этот метод мгновенно разрывает все соединения всех пользователей во всех базах данного кластера. Если на сервере работает много людей, этот вариант лучше оставить на нерабочее время.
Если мы не хотим перезапускать всю службу, можно попробовать завершить конкретный рабочий процесс. Разберем разницу между ними:
rphost.exe — рабочий процесс, который непосредственно обслуживает сеансы пользователей. Если завершить конкретный "экземпляр" этого процесса через Диспетчер задач, зависшие в нем сеансы исчезнут.rmngr.exe — менеджер кластера. Его перезапуск более критичен, но иногда именно он помогает, когда консоль администрирования "подтормаживает".Посмотрим на ситуацию: в консоли 1С можно увидеть, на каком именно rphost (по номеру порта или ID) висит пользователь. Завершение именно этого процесса позволит выкинуть только часть пользователей, а не всех сразу.
Для профилактики многие администраторы используют скрипты, которые запускаются по расписанию (например, ночью). Разберем пример простого .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)"
В данном примере мы сначала корректно останавливаем службу, затем принудительно "добиваем" оставшиеся процессы (если они зависли при остановке) и запускаем службу заново.
Если ваш сервер 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, где хранится информация о контексте сеансов. Это гарантирует, что после запуска ни один "призрак" не вернется.
Чтобы сеансы не зависали в будущем, мы можем настроить сам кластер 1С на автоматическую очистку. Проанализируем ключевые параметры в свойствах кластера:
Эти настройки позволяют серверу 1С самостоятельно "подметать" забытые подключения без вашего участия.
Иногда 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" и завершать их точечно, не затрагивая работу всего предприятия.