Как настроить автоматическое завершение зависших сеансов в 1С и мониторить программные лицензии?

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

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

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

Причины возникновения «дублей» и зависших сеансов

Прежде чем переходить к настройкам, проанализируем, почему возникают подобные ситуации. В подавляющем большинстве случаев зависшие сеансы и дубли пользователей появляются из-за некорректного завершения работы с базой. Это происходит по следующим причинам:

  1. Микрообрывы сетевого соединения: при кратковременной потере пакетов между клиентом и сервером 1С physical-соединение разрывается, но сервер считает его активным еще некоторое время и продолжает удерживать сеанс.
  2. Неправильный выход из RDP: пользователи закрывают терминальную сессию простым нажатием на крестик в правом верхнем углу панели RDP. В результате сессия на сервере переходит в состояние "Disconnected" (Отключена), а запущенный в ней процесс 1С продолжает работать и занимать лицензию.
  3. Зависание рабочих процессов сервера: тяжелые запросы или утечки памяти могут приводить к тому, что рабочий процесс rphost.exe перестает отвечать, блокируя завершение связанных с ним пользовательских сессий.

Шаг 1. Настройка параметров спящих сеансов в консоли 1С

Первым делом настроим поведение сеансов на уровне самого кластера серверов 1С. По умолчанию платформа предоставляет механизмы автоматического перевода неактивных пользователей в спящий режим с последующим их удалением. Рассмотрим, как изменить эти параметры.

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

  1. Время засыпания пассивного сеанса (параметр ВремяЗасыпанияПассивногоСеанса) — определяет период бездействия пользователя (в секундах), после которого сеанс считается пассивным и "засыпает". По умолчанию этот параметр равен 1200 секунд (20 минут). Рекомендуется установить более агрессивное значение, например, 300–600 секунд (5–10 минут). В спящем состоянии сеанс временно освобождает лицензию 1С (если она раздается сервером).
  2. Время завершения спящего сеанса (параметр ВремяЗавершенияСпящегоСеанса) — определяет время (в секундах), по истечении которого спящий сеанс окончательно удаляется сервером. По умолчанию установлено значение 86400 секунд (24 часа). Это слишком большой период для нагруженных систем. Рекомендуется снизить это значение до 600–1200 секунд (10–20 минут).

Важный нюанс: если пользователи работают через веб-клиент (браузер) или используют HTTP/HTTPS-сервисы по медленным каналам связи, слишком короткие таймауты могут приводить к постоянным разрывам сессий и дискомфорту в работе. Для таких сценариев подбирайте параметры экспериментально.

Шаг 2. Автоматический перезапуск рабочих процессов rphost

Если сеанс завис "наглухо" на уровне операционной системы, стандартные таймауты ИБ могут не сработать. Для очистки таких "мертвых" соединений настроим автоматический перезапуск рабочих процессов в свойствах локального кластера:

  1. Откроем свойства кластера в консоли администрирования 1С.
  2. Установим параметр Интервал перезапуска рабочих процессов в значение 86400 секунд (раз в сутки). Это позволит системе плавно создавать новые чистые процессы rphost.exe, переводя на них активных пользователей.
  3. Параметр Выключенные процессы останавливать через установим в значение 120–180 секунд. За это время все живые сеансы успеют мигрировать на новый рабочий процесс, а старый зависший процесс вместе с "мертвыми" сессиями будет принудительно завершен операционной системой.
  4. Дополнительно настроим лимиты по памяти: укажем Допустимый объем памяти и Интервал превышения допустимого объема памяти, чтобы сервер автоматически перезапускал процессы, которые начали потреблять слишком много ОЗУ из-за некорректных запросов.

Шаг 3. Настройка политик сервера терминалов (RDP GPO)

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

Настроим групповые политики (GPO) на сервере терминалов:

  1. Откроем редактор локальной групповой политики (команда gpedit.msc).
  2. Перейдем по пути: Конфигурация компьютера \ Административные шаблоны \ Компоненты Windows \ Службы удаленных рабочих столов \ Узел сеансов удаленных рабочих столов \ Ограничение времени сеанса.
  3. Найдем политику Задать предел времени для отключенных сеансов. Включим её и установим лимит времени, например, 10 или 15 минут. Теперь, если пользователь закроет терминал "крестиком", через 15 минут сервер принудительно выполнит выход (Log off) из системы, закрыв все запущенные программы, включая 1С, что автоматически освободит лицензию.
  4. Включим политику Настройка интервала keep-alive для подключений. Это позволит серверу терминалов отправлять регулярные пакеты для проверки активности клиента и своевременно переводить сеанс в статус "Отключен" при физическом обрыве связи.

Шаг 4. Настройка сетевых параметров (TCP Keep-Alive и dbcfg.xml)

Для того чтобы операционная система сервера быстрее реагировала на аварийный обрыв связи с клиентом (например, при внезапном отключении ноутбука от Wi-Fi), настроим параметры сетевых сокетов TCP/IP в реестре Windows Server.

Перейдем в ветку реестра:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

Создадим или отредактируем следующие параметры типа DWORD (32 бита):

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


<config xmlns="http://v8.1c.ru/v8/config">
    <pingPeriod>60</pingPeriod>
    <pingTimeout>10</pingTimeout>
</config>

Этот код указывает серверу пинговать клиентские сессии каждые 60 секунд с таймаутом ожидания ответа в 10 секунд. Если клиент не ответил, сервер корректно закроет сеанс.

Шаг 5. Мониторинг программных лицензий: современные подходы

В оригинальном обсуждении упоминалась утилита Aladdin Monitor, однако она предназначена исключительно для устаревших аппаратных USB-ключей HASP и абсолютно бесполезна для современных программных лицензий (пин-кодов). Рассмотрим современные инструменты контроля утилизации лицензий.

Встроенный функционал платформы 1С (версии 8.5.2 и выше)

В современных релизах платформы произошла серьезная модернизация механизма лицензирования. На смену старым службам пришел полноценный компонент «1С:Предприятие — менеджер лицензий». Теперь в платформу встроен мощный инструментарий:

Использование утилиты 1C:Enterprise-Ring

Для администрирования программных лицензий и проверки их привязки к оборудованию используется кроссплатформенная утилита командной строки ring. С её помощью можно собирать подробную техническую информацию о развернутых лицензиях на сервере, проверять валидность текущих пин-кодов и автоматизировать получение резервных ключей активации.

Программный сбор данных через COM-соединение

Если ваша система развернута на более ранних версиях платформы (8.3), вы можете автоматизировать контроль за лицензиями с помощью внешних обработок 1С или систем мониторинга (например, Zabbix/Grafana). Напишем демонстрационный скрипт на языке PowerShell, который подключается к серверу 1С через COM-объект и собирает информацию об активных сеансах:


$Connector = New-Object -ComObject "V83.COMConnector"
$Agent = $Connector.ConnectAgent("localhost")
$Clusters = $Agent.GetClusters()
$Cluster = $Clusters[0]
$Agent.Authenticate($Cluster, "", "")
$Sessions = $Agent.GetSessions($Cluster)

Write-Host "Список активных сеансов:" -ForegroundColor Green
ForEach ($Session in $Sessions) {
    if ($Session.AppID -eq "1CV8C") {
        Write-Host "Пользователь: $($Session.userName) | Сеанс: $($Session.SessionID) | Запущен: $($Session.Started)"
    }
}

Этот скрипт можно упаковать в регулярное задание планировщика Windows и отправлять алерты в Telegram, если количество свободных лицензий приближается к критическому минимуму.

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

← На главную