Как освободить зависшие лицензии аппаратного ключа защиты 1С без прерывания работы пользователей?

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

При активной эксплуатации сетевых аппаратных ключей защиты USB (HASP) системные администраторы часто сталкиваются с ситуацией, когда физическое количество работающих сотрудников значительно меньше номинала ключа, но 1С выдает ошибку о нехватке свободных лицензий. Даже после принудительного завершения всех терминальных сессий RDP и клиентских приложений 1С занятые слоты на ключе продолжают удерживаться. Разберем причины такого поведения и рассмотрим проверенные способы освобождения лицензий без перезагрузки сервера и без выгрузки активных пользователей.

Проанализируем основные причины возникновения «фантомных» зависших лицензий:

  1. Особенности сетевого стека HASP License Manager. При аварийном завершении работы клиента (разрыв связи, сбой RDP-сессии, закрытие процесса через диспетчер задач) служба HASP Loader освобождает слот только по внутреннему таймауту keep-alive. Если сетевой сокет «завис», менеджер лицензий может бесконечно считать клиента активным.
  2. Выдача лицензий сервером 1С:Предприятия. Если в свойствах информационных баз включен параметр «Разрешить выдачу лицензий сервером», кластер 1С забирает лицензии в свой пул и раздает их сеансам самостоятельно. В этом случае на каждый запуск информационной базы расходуется отдельная лицензия. Если в кластере остаются «спящие» сеансы или фоновые задания, сервер не возвращает лицензию в общий пул.

Способ 1. Быстрый перезапуск службы HASP Loader командным скриптом

Рассмотрим самый быстрый и действенный способ сбросить зависшие сессии на аппаратном ключе без прерывания работы пользователей. Служба сетевого менеджера лицензий хранит текущую таблицу занятых слотов в оперативной памяти. Если перезапустить службу за минимальный интервал времени (1–2 секунды), таблица очистится, а активные клиенты 1С не потеряют связь, так как платформа 1С опрашивает ключ циклически с интервалом в несколько минут.

Посмотрим на пример командного файла (.bat или .cmd), который необходимо запускать с правами администратора на том сервере, где физически установлен USB-ключ и запущена служба менеджера лицензий:


net stop "Hasp Loader"
timeout /T 1 /NOBREAK
net start "Hasp Loader"

Разберем по шагам, как работает данный сценарий:

  1. Команда net stop "Hasp Loader" останавливает службу сетевого менеджера лицензий, сбрасывая всю накопленную таблицу сокетов и зависших клиентов.
  2. Параметр timeout /T 1 /NOBREAK задает паузу ровно в 1 секунду для корректного освобождения USB-порта драйвером операционной системы.
  3. Команда net start "Hasp Loader" заново запускает службу. Работающие клиенты 1С при следующем плановом опросе ключа прозрачно зарегистрируются заново, а все отключенные и зависшие сеансы освободят свои слоты.

Способ 2. Очистка сеансов и соединений в консоли администрирования кластера 1С

Если раздача лицензий настроена через сервер 1С:Предприятия, перезапуск HASP Loader может помочь лишь временно, так как серверные процессы rphost повторно захватят слоты под существующие внутренние соединения. Рассмотрим, как очистить серверные сеансы:

  1. Откроем утилиту «Администрирование серверов 1С:Предприятия».
  2. Перейдем в ветку нужного кластера и развернем список «Сеансы».
  3. Проанализируем список сеансов, отсортировав их по времени последней активности. Найдем сеансы со статусом «Спящий», а также оставшиеся от отключенных пользователей фоновые задания.
  4. Удалим зависшие сеансы вручную через контекстное меню.
  5. Перейдем в ветку «Соединения» и убедимся, что нет брошенных соединений от завершенных процессов. После удаления серверных сеансов освобожденные лицензии сразу вернутся для новых подключений.

Способ 3. Оптимизация схемы лицензирования для предотвращения зависаний

Чтобы исключить повторение проблемы нехватки лицензий в будущем, выполним комплекс превентивных настроек:

  1. Отключение раздачи лицензий сервером для терминалов RDP. В консоли администрирования в свойствах информационной базы установим параметр «Разрешить выдачу лицензий сервером 1С:Предприятия = Нет». В этом случае клиенты будут брать лицензию напрямую через менеджер лицензий. При работе в терминальном сервере на одного пользователя (независимо от числа открытых баз) будет расходоваться строго одна лицензия.
  2. Настройка конфигурационного файла nethasp.ini. На клиентских компьютерах и серверах терминалов в каталоге платформы conf отредактируем файл nethasp.ini. Отключим широковещательный опрос NH_USE_BROADCAST = Disabled и явно укажем прямой IP-адрес сервера с ключом в параметре NH_SERVER_ADDR = 192.168.x.x. Это исключит потерю сетевых пакетов подтверждения лицензии.
  3. Вынос службы лицензирования на отдельный хост. Выделим отдельную виртуальную или физическую машину для USB-ключей и службы HASP. Это позволит при необходимости выполнять регулярный перезапуск службы по расписанию (например, через Планировщик задач Windows), не затрагивая основной рабочий кластер 1С.
← На главную