Каждый администратор крупных клиент-серверных баз 1С рано или поздно сталкивается с ситуацией, когда пользователи начинают жаловаться на невозможность войти в систему из-за нехватки свободных лицензий. При этом при анализе консоли администрирования обнаруживается множество "сеансов-призраков" или дублирующихся записей одних и тех же сотрудников. Пользователь уже давно закрыл программу или ушел домой, а его сеанс продолжает висеть в системе и удерживать лицензию.
В этой статье мы подробно разберем, как решить проблему зависших сеансов на стороне сервера 1С:Предприятия и сервера терминалов RDP, а также рассмотрим современные способы мониторинга программных лицензий, пришедшие на смену устаревшим утилитам.
Прежде чем переходить к настройкам, проанализируем, почему возникают подобные ситуации. В подавляющем большинстве случаев зависшие сеансы и дубли пользователей появляются из-за некорректного завершения работы с базой. Это происходит по следующим причинам:
rphost.exe перестает отвечать, блокируя завершение связанных с ним пользовательских сессий.Первым делом настроим поведение сеансов на уровне самого кластера серверов 1С. По умолчанию платформа предоставляет механизмы автоматического перевода неактивных пользователей в спящий режим с последующим их удалением. Рассмотрим, как изменить эти параметры.
Откроем консоль администрирования кластера серверов 1С, перейдем в свойства нашей информационной базы и найдем два ключевых параметра:
ВремяЗасыпанияПассивногоСеанса) — определяет период бездействия пользователя (в секундах), после которого сеанс считается пассивным и "засыпает". По умолчанию этот параметр равен 1200 секунд (20 минут). Рекомендуется установить более агрессивное значение, например, 300–600 секунд (5–10 минут). В спящем состоянии сеанс временно освобождает лицензию 1С (если она раздается сервером).ВремяЗавершенияСпящегоСеанса) — определяет время (в секундах), по истечении которого спящий сеанс окончательно удаляется сервером. По умолчанию установлено значение 86400 секунд (24 часа). Это слишком большой период для нагруженных систем. Рекомендуется снизить это значение до 600–1200 секунд (10–20 минут).Важный нюанс: если пользователи работают через веб-клиент (браузер) или используют HTTP/HTTPS-сервисы по медленным каналам связи, слишком короткие таймауты могут приводить к постоянным разрывам сессий и дискомфорту в работе. Для таких сценариев подбирайте параметры экспериментально.
Если сеанс завис "наглухо" на уровне операционной системы, стандартные таймауты ИБ могут не сработать. Для очистки таких "мертвых" соединений настроим автоматический перезапуск рабочих процессов в свойствах локального кластера:
rphost.exe, переводя на них активных пользователей.Поскольку пользователи подключаются по RDP, критически важно настроить политики автоматического закрытия брошенных терминальных сессий. Если этого не сделать, никакие настройки 1С не помогут — процесс тонкого или толстого клиента внутри отключенной сессии Windows будет жить бесконечно.
Настроим групповые политики (GPO) на сервере терминалов:
gpedit.msc).Для того чтобы операционная система сервера быстрее реагировала на аварийный обрыв связи с клиентом (например, при внезапном отключении ноутбука от Wi-Fi), настроим параметры сетевых сокетов TCP/IP в реестре Windows Server.
Перейдем в ветку реестра:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Создадим или отредактируем следующие параметры типа DWORD (32 бита):
KeepAliveTime — установим значение 300000 (время ожидания в миллисекундах перед первой проверкой соединения, то есть 5 минут).KeepAliveInterval — установим значение 1000 (интервал между повторными проверками в миллисекундах, то есть 1 секунда).Также настроим конфигурационный файл платформы dbcfg.xml на сервере 1С, чтобы заставить систему чаще пинговать подключенных клиентов. Создадим файл или добавим в существующий файл по пути установки платформы следующий фрагмент кода:
<config xmlns="http://v8.1c.ru/v8/config">
<pingPeriod>60</pingPeriod>
<pingTimeout>10</pingTimeout>
</config>
Этот код указывает серверу пинговать клиентские сессии каждые 60 секунд с таймаутом ожидания ответа в 10 секунд. Если клиент не ответил, сервер корректно закроет сеанс.
В оригинальном обсуждении упоминалась утилита Aladdin Monitor, однако она предназначена исключительно для устаревших аппаратных USB-ключей HASP и абсолютно бесполезна для современных программных лицензий (пин-кодов). Рассмотрим современные инструменты контроля утилизации лицензий.
В современных релизах платформы произошла серьезная модернизация механизма лицензирования. На смену старым службам пришел полноценный компонент «1С:Предприятие — менеджер лицензий». Теперь в платформу встроен мощный инструментарий:
МониторингЛицензий, к которому можно обращаться программно.Для администрирования программных лицензий и проверки их привязки к оборудованию используется кроссплатформенная утилита командной строки ring. С её помощью можно собирать подробную техническую информацию о развернутых лицензиях на сервере, проверять валидность текущих пин-кодов и автоматизировать получение резервных ключей активации.
Если ваша система развернута на более ранних версиях платформы (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 и использование современных программных средств мониторинга лицензий, позволяет полностью избавиться от проблемы "зависших дублей" пользователей и обеспечить стабильную и бесперебойную работу всей системы.