Как определить и завершить зависшие (неактивные) сеансы пользователей в 1С?

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

Многие администраторы и разработчики сталкиваются с типичной проблемой: пользователи запускают программу 1С, работают в ней, а затем уходят на обед, домой или просто переключаются на другие задачи, оставляя сеанс открытым. Такие неактивные соединения потребляют оперативную память на сервере и, что самое главное, занимают ценные клиентские лицензии. Давайте разберем по шагам, как правильно выявлять и завершать такие сеансы, не прерывая при этом важные процессы, например, длительное формирование отчетов.

Почему сложно определить неактивность программно?

Часто возникает желание написать собственную обработку, которая будет отслеживать активность мыши или клавиатуры и программно "убивать" сеанс. Однако, проанализируем ситуацию глубже: в общем случае определить реальную "степень неактивности" только средствами встроенного языка 1С практически невозможно.

Вот несколько причин, почему это не работает так просто:

  1. Клиент 1С регулярно отправляет на сервер служебные пакеты KeepAlive (обычно каждые 5-10 минут) для поддержания соединения. Для сервера такой сеанс выглядит активным.
  2. В формах могут быть настроены обработчики ожидания, которые периодически обновляют списки, динамические списки или проверяют новые задачи. Это также генерирует серверные вызовы.
  3. Если пользователь запустил тяжелую обработку "в долгую" (например, закрытие месяца) и ушел, сеанс не должен быть завершен, так как идет реальная полезная работа.

Что же делать? Рассмотрим архитектурно правильный подход: переведем длительные операции (тяжелые обработки, перепроведение документов) на регламентные задания под специальным служебным пользователем. В таком случае все пользовательские сеансы (не системные), которые долго висят без движения, можно смело считать "мусором" и закрывать.

Штатный механизм платформы: "Спящие сеансы"

Начиная с версии платформы 1С:Предприятие 8.3.5, разработчики внедрили системный механизм перевода неактивных пользователей в так называемый "спящий режим". Посмотрим, как это работает на практике.

Если клиентское приложение бездействует (нет реальной пользовательской активности и тяжелых вызовов к серверу), платформа автоматически приостанавливает сеанс. Главное преимущество этого режима — освобождение клиентской лицензии. Сервер базы данных также освобождает часть ресурсов. Если пользователь вернется к компьютеру и нажмет любую кнопку в программе, сеанс мгновенно "просыпается", заново получает лицензию (если есть свободные) и продолжает работу с того же места.

Кроме того, если у пользователя физически обрывается связь (например, закрыли крышку ноутбука, пропал интернет), сервер обнаруживает потерю соединения в течение пары минут и также переводит сеанс в спящий режим.

Как настроить параметры автозавершения сеансов?

Выясним, где находятся эти настройки. Нам не нужно писать сложный код, достаточно открыть Конфигуратор и задать нужные параметры на уровне всей информационной базы.

  1. Зайдите в Конфигуратор с полными правами.
  2. Откройте меню Администрирование и выберите пункт Параметры информационной базы.
  3. Найдите два ключевых параметра управления сеансами.

Рассмотрим эти параметры подробнее:

Время засыпания пассивного сеанса. По умолчанию этот параметр равен 1200 секундам (20 минут). Это время абсолютного бездействия, после которого сеанс уснет. Важное правило: не рекомендуется устанавливать значение менее 600 секунд (10 минут), так как иначе механизм будет конфликтовать со служебными пакетами KeepAlive, которые клиент отправляет серверу.

Время завершения спящего сеанса. По умолчанию установлено огромное значение — 24 часа (86400 секунд). По истечении этого времени спящий сеанс уничтожается полностью без возможности восстановления. В реальной практике системные администраторы часто снижают этот параметр до 3600 секунд (1 час) или 7200 секунд (2 часа). Это позволяет эффективно очищать оперативную память на сервере кластера 1С.

Самостоятельное завершение сеансов пользователями

Посмотрим на еще одно полезное нововведение, появившееся в платформе версии 8.3.24. Теперь система позволяет пользователям самостоятельно справляться с повисшими сеансами.

Представьте ситуацию: бухгалтер работал на рабочем компьютере, забыл закрыть 1С и ушел домой. Из дома он пытается зайти в базу под своей же учетной записью через RDP или веб-клиент, но получает сообщение о нехватке лицензий или блокировке объекта. Теперь платформа автоматически выдаст диалоговое окно с предложением принудительно завершить свой предыдущий сеанс. Это значительно снижает нагрузку на системных администраторов, так как пользователям больше не нужно звонить в техподдержку с просьбой "выкинуть их из базы".

Программное управление сеансами (утилита RAC)

Если штатных настроек времени засыпания вам недостаточно, и бизнес-логика требует жесткого завершения работы определенных групп пользователей по расписанию (например, выгонять всех ровно в 02:00 ночи для проведения архивирования или технического обслуживания), мы воспользуемся консольной утилитой удаленного администрирования RAC (Remote Administration Console).

Разберем, как с помощью скрипта можно принудительно разорвать соединение на уровне кластера серверов 1С. Для этого используется команда session terminate. Пример команды, которую можно обернуть в скрипт PowerShell или bash:


rac session terminate --cluster=<Идентификатор_Кластера> --session=<Идентификатор_Сеанса>

Для автоматизации этого процесса вы можете написать скрипт, который сначала получает список всех активных сеансов с помощью команды rac session list, фильтрует их по времени активности или имени пользователя, а затем в цикле вызывает команду завершения для каждого зависшего или нежелательного сеанса.

Подводим итоги

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

  1. Правильно проектировать систему: все долгие процедуры выносить в фоновые задания.
  2. Использовать встроенный платформенный механизм спящих сеансов для экономии лицензий.
  3. Настроить адекватные значения засыпания и завершения в Параметрах информационной базы (например, 20 минут на засыпание и 1-2 часа на полное уничтожение).
  4. При необходимости жестких ночных ограничений — использовать скрипты с утилитой RAC.

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

← На главную