При эксплуатации серверов 1С на базе ОС Linux (например, Debian или Ubuntu) часто возникает ситуация, когда существующих аппаратных ключей защиты (HASP) становится недостаточно. В условиях дефицита оборудования вендоры предлагают расширять количество рабочих мест с помощью программных лицензий. Однако «смешивание» аппаратных и программных средств защиты без правильной настройки часто приводит к критической ошибке: клиентские приложения при запуске зависают на стадии подключения к серверу, не выдавая никаких сообщений об ошибках.
Рассмотрим подробнее, почему возникает этот «лицензионный зоопарк», как работает механизм поиска ключей и что необходимо предпринять для стабилизации работы системы.
Первое, что нам необходимо прояснить — это техническая суть процесса привязки программной лицензии к аппаратному ключу. Важно понимать, что программную лицензию 1С невозможно физически записать в память красного пользовательского HASP-ключа. Технически это остается программной лицензией в виде файла с расширением .lic.
При активации такой лицензии через консоль или клиент 1С, USB-ключ используется только как уникальный «якорь» (Hardware ID). Это делается для того, чтобы лицензия не «слетала» при изменении параметров виртуальной машины или замене комплектующих сервера (процессора, сетевой карты). Если файл лицензии 2022**********.lic будет удален или к нему не будет доступа, программные лицензии перестанут работать, несмотря на наличие вставленного ключа.
Для понимания причин зависания проанализируем алгоритм, по которому платформа 1С ищет лицензию при запуске. Порядок строго определен:
Важный нюанс: если на стороне сервера в свойствах информационной базы включена опция Разрешить выдачу лицензий сервером 1С, то сервер начинает раздавать лицензии самостоятельно. В этом случае лицензия выдается на каждый сеанс, а не на компьютер в целом. Если пользователь откроет три окна 1С, сервер спишет три лицензии. Если же клиент берет лицензию напрямую через HASP LM по сети, будет занята только одна лицензия на один ПК.
Зависание без ошибок (белое окно или индикатор загрузки) в 90% случаев связано с тайм-аутом ожидания ответа от одного из источников лицензий. В смешанной среде происходит следующее:
Проанализируем ситуацию: клиент настроен на поиск ключа через nethasp.ini, но сервер 1С также пытается выдать ему программную лицензию. Если менеджер лицензий aksusbd на Linux или широковещательный запрос (broadcast) в сети работает нестабильно, клиент «замирает», ожидая ответа от сетевого ресурса. В системах на базе Ryzen и современных ядрах Linux старые драйверы HASP могут некорректно обрабатывать многопоточные запросы, что усугубляет проблему.
Для стабилизации системы нам необходимо ликвидировать хаос в распределении лицензий. Рекомендуется придерживаться следующего алгоритма:
Если у вас основная масса лицензий — аппаратные (HASP), лучше всего заставить клиентов забирать их самостоятельно. Для этого выполним следующие действия:
Разрешить выдачу лицензий сервером 1С в значение Нет.После этого сервер перестанет пытаться выдать лицензию из файла .lic всем подряд, и нагрузка на менеджер лицензий распределится равномерно.
Чтобы избежать длительного ожидания ответа от сети (broadcast), необходимо жестко прописать адреса серверов, где установлены USB-ключи. В файле nethasp.ini (обычно находится в папке conf установленной платформы) отредактируем секцию [NH_COMMON] и [NH_TCPIP]:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.10, 192.168.1.11, 192.168.1.12
NH_USE_BROADCAST = Disabled
Здесь NH_SERVER_ADDR — это IP-адреса всех ваших машин, в которые воткнуты красные ключи (на 20, 10 и 5 лицензий). Отключение NH_USE_BROADCAST мгновенно ускоряет запуск, так как программа не ждет ответа от всей сети, а обращается по конкретным адресам.
Если программная лицензия на 10 мест была активирована на сервере, убедимся, что сервер 1С видит этот файл. В Linux файлы лицензий должны располагаться по пути:
/var/1C/licenses или в домашнем каталоге пользователя, под которым запущен сервер (например, /home/usr1cv8/.1cv8/1C/1cv8/conf).
Критически важно проверить права доступа:
chown usr1cv8:grp1cv8 /var/1C/licenses/*.lic
chmod 644 /var/1C/licenses/*.lic
Если файл принадлежит root или другому пользователю, сервер 1С не сможет его прочитать, что также приведет к задержкам при попытке «выдать» эту лицензию клиенту.
Выясним еще одну важную техническую деталь: сервер 1С (процесс rmngr) может самостоятельно увидеть только один локальный ключ каждой серии (один сетевой, один локальный). Если вы воткнете в один сервер два красных ключа (например, на 20 и 10 мест), драйвер увидит только один из них. Именно поэтому ключи необходимо разносить на разные физические машины или использовать HASP License Manager для их объединения в сети.
Рассмотрим оптимальную схему для вашего «зоопарка»:
nethasp.ini с указанием всех адресов.aksmonitor для контроля занятых мест на HASP, но помните, что программные лицензии она не показывает. Для их контроля используйте консоль администрирования 1С (раздел «Сеансы»).Таким образом, разделение способов получения лицензий и исключение широковещательных запросов в сети позволит полностью устранить зависания сервера на Ryzen под управлением Debian.