Многие администраторы и разработчики сталкиваются с типичной проблемой: пользователи запускают программу 1С, работают в ней, а затем уходят на обед, домой или просто переключаются на другие задачи, оставляя сеанс открытым. Такие неактивные соединения потребляют оперативную память на сервере и, что самое главное, занимают ценные клиентские лицензии. Давайте разберем по шагам, как правильно выявлять и завершать такие сеансы, не прерывая при этом важные процессы, например, длительное формирование отчетов.
Часто возникает желание написать собственную обработку, которая будет отслеживать активность мыши или клавиатуры и программно "убивать" сеанс. Однако, проанализируем ситуацию глубже: в общем случае определить реальную "степень неактивности" только средствами встроенного языка 1С практически невозможно.
Вот несколько причин, почему это не работает так просто:
KeepAlive (обычно каждые 5-10 минут) для поддержания соединения. Для сервера такой сеанс выглядит активным.Что же делать? Рассмотрим архитектурно правильный подход: переведем длительные операции (тяжелые обработки, перепроведение документов) на регламентные задания под специальным служебным пользователем. В таком случае все пользовательские сеансы (не системные), которые долго висят без движения, можно смело считать "мусором" и закрывать.
Начиная с версии платформы 1С:Предприятие 8.3.5, разработчики внедрили системный механизм перевода неактивных пользователей в так называемый "спящий режим". Посмотрим, как это работает на практике.
Если клиентское приложение бездействует (нет реальной пользовательской активности и тяжелых вызовов к серверу), платформа автоматически приостанавливает сеанс. Главное преимущество этого режима — освобождение клиентской лицензии. Сервер базы данных также освобождает часть ресурсов. Если пользователь вернется к компьютеру и нажмет любую кнопку в программе, сеанс мгновенно "просыпается", заново получает лицензию (если есть свободные) и продолжает работу с того же места.
Кроме того, если у пользователя физически обрывается связь (например, закрыли крышку ноутбука, пропал интернет), сервер обнаруживает потерю соединения в течение пары минут и также переводит сеанс в спящий режим.
Выясним, где находятся эти настройки. Нам не нужно писать сложный код, достаточно открыть Конфигуратор и задать нужные параметры на уровне всей информационной базы.
Рассмотрим эти параметры подробнее:
Время засыпания пассивного сеанса. По умолчанию этот параметр равен 1200 секундам (20 минут). Это время абсолютного бездействия, после которого сеанс уснет. Важное правило: не рекомендуется устанавливать значение менее 600 секунд (10 минут), так как иначе механизм будет конфликтовать со служебными пакетами KeepAlive, которые клиент отправляет серверу.
Время завершения спящего сеанса. По умолчанию установлено огромное значение — 24 часа (86400 секунд). По истечении этого времени спящий сеанс уничтожается полностью без возможности восстановления. В реальной практике системные администраторы часто снижают этот параметр до 3600 секунд (1 час) или 7200 секунд (2 часа). Это позволяет эффективно очищать оперативную память на сервере кластера 1С.
Посмотрим на еще одно полезное нововведение, появившееся в платформе версии 8.3.24. Теперь система позволяет пользователям самостоятельно справляться с повисшими сеансами.
Представьте ситуацию: бухгалтер работал на рабочем компьютере, забыл закрыть 1С и ушел домой. Из дома он пытается зайти в базу под своей же учетной записью через RDP или веб-клиент, но получает сообщение о нехватке лицензий или блокировке объекта. Теперь платформа автоматически выдаст диалоговое окно с предложением принудительно завершить свой предыдущий сеанс. Это значительно снижает нагрузку на системных администраторов, так как пользователям больше не нужно звонить в техподдержку с просьбой "выкинуть их из базы".
Если штатных настроек времени засыпания вам недостаточно, и бизнес-логика требует жесткого завершения работы определенных групп пользователей по расписанию (например, выгонять всех ровно в 02:00 ночи для проведения архивирования или технического обслуживания), мы воспользуемся консольной утилитой удаленного администрирования RAC (Remote Administration Console).
Разберем, как с помощью скрипта можно принудительно разорвать соединение на уровне кластера серверов 1С. Для этого используется команда session terminate. Пример команды, которую можно обернуть в скрипт PowerShell или bash:
rac session terminate --cluster=<Идентификатор_Кластера> --session=<Идентификатор_Сеанса>
Для автоматизации этого процесса вы можете написать скрипт, который сначала получает список всех активных сеансов с помощью команды rac session list, фильтрует их по времени активности или имени пользователя, а затем в цикле вызывает команду завершения для каждого зависшего или нежелательного сеанса.
Проанализировав различные подходы, мы можем сделать вывод: пытаться писать собственный код на встроенном языке 1С для отслеживания движения мыши или бездействия клавиатуры — путь в никуда. Вместо этого необходимо:
Применяя эти методы в комплексе, вы обеспечите стабильную работу сервера 1С, отсутствие зависших соединений и оптимальное использование доступных лицензий.