При переходе офиса с операционной системы Windows на Linux (в частности, Ubuntu) системные администраторы часто сталкиваются с нестабильной работой системы защиты 1С:Предприятие. Типичная ситуация: пользователи заходят в базу, работают некоторое время (от 10 минут до нескольких часов), после чего программа аварийно закрывается с ошибкой «Ключ защиты программы больше не доступен! Работа программы завершена». При этом на стороне Windows-клиентов в той же сети проблема может не проявляться. Рассмотрим подробно причины возникновения этой ошибки и разберем по шагам методы её устранения.
Первым делом проанализируем аппаратную составляющую защиты. Одной из самых распространенных причин «вылетов» является использование нескольких клиентских ключей серии HASP HL на одном физическом компьютере или сервере. Разберем, почему это происходит.
Все многопользовательские клиентские ключи (на 5, 10, 20, 50 и 100 рабочих мест) относятся к одной серии — ORGL8. Техническая особенность драйвера защиты и менеджера лицензий HASP License Manager заключается в том, что он корректно инициализирует только один ключ каждой серии на одном компьютере. Если в USB-порты одного сервера вставлены два ключа (например, на 5 и на 10 лицензий), система может вести себя непредсказуемо: либо видеть только один из них (первый найденный), либо периодически терять связь с обоим из-за конфликта драйверов.
Выясним причину, по которой это «работало на Windows». В среде Windows драйверы иногда могли суммировать лицензии или игнорировать некоторые ошибки опроса шины USB. Однако в Linux-системах взаимодействие с оборудованием и работа службы aksusbd (демон HASP) построены гораздо строже. Любая микро-задержка или конфликт прерываний приводит к тому, что клиентское приложение теряет связь с лицензией и немедленно закрывает сессию пользователя.
Наиболее надежный способ решения проблемы — разнести аппаратные ключи серии ORGL8 на разные физические компьютеры (или разные виртуальные машины с пробросом конкретных USB-контроллеров). Рассмотрим алгоритм действий:
ENSR8) и клиентский ключ (серия ORGL8) не конфликтуют между собой. Их можно оставлять на одной машине. Конфликтуют именно два и более клиентских ключа.HASP License Manager. В Linux это пакет haspd или aksusbd.nhsrv.ini задать им уникальные имена в параметре NHS_SERVERNAMES.После того как мы разнесли ключи, необходимо убедиться, что Linux-клиенты (Ubuntu) знают, где именно искать эти лицензии. По умолчанию 1С использует широковещательные UDP-запросы (broadcast), которые в Linux-сетях часто блокируются или работают нестабильно. Разберем настройку файла конфигурации на стороне пользователя.
Перейдем к редактированию файла nnhasp.ini. В Linux он обычно располагается по пути /opt/1C/v8.3/x86_64/conf/ (для 64-битной платформы). Нам необходимо жестко прописать адреса серверов лицензий:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.10, 192.168.1.11 ;; IP-адреса ваших серверов с ключами
NH_USE_BROADCAST = Disabled
NH_TCPIP_METHOD = TCP
Использование метода TCP вместо UDP является критически важным для стабильности в Ubuntu. TCP-соединение гарантирует доставку пакетов проверки лицензии («heartbeat»), что предотвращает случайные вылеты при кратковременных помехах в сети.
Проанализируем еще один неочевидный фактор — агрессивное энергосбережение в ядре Linux. Современные дистрибутивы (Ubuntu 20.04/22.04 и новее) часто переводят USB-устройства в спящий режим, если к ним нет активных обращений. Если 1С обращается к ключу, а он «спит», время ответа превышает допустимый порог, и сессия обрывается.
Рассмотрим, как отключить эту функцию. Необходимо отредактировать параметры загрузчика GRUB:
/etc/default/grub с правами суперпользователя.GRUB_CMDLINE_LINUX_DEFAULT.usbcore.autosuspend=-1.sudo update-grub и перезагрузим сервер.Это гарантирует, что USB-порты, в которые вставлены ключи защиты, всегда будут находиться в активном состоянии.
Если ваш сервер 1С работает внутри виртуальной машины KVM (как в рассматриваемом случае), проброс USB-устройств требует особого внимания. Посмотрим на важные моменты:
virt-manager или через virsh рекомендуется использовать контроллер USB 2.0 (EHCI) или USB 3.0 (xHCI), так как старые контроллеры USB 1.1 работают крайне медленно с ключами защиты.Выясним еще одну деталь: кто именно выдает лицензию. В консоли администрирования серверов 1С есть настройка «Разрешить выдачу лицензий сервером 1С:Предприятия».
Если эта опция включена, сервер 1С сам опрашивает ключи и раздает лицензии пользователям. Если вы используете аппаратные ключи и у вас много Linux-клиентов, иногда стабильнее работает схема, когда каждый клиент самостоятельно находит ключ по сети через nnhasp.ini. В этом случае нагрузка на менеджер лицензий распределяется более равномерно, а сервер 1С не становится «узким местом» в системе защиты. В настройках базы данных в консоли администрирования установите значение «Нет» для параметра выдачи лицензий сервером, если вы планируете использовать прямую работу клиентов с HASP LM.
Резюме: Для устранения вылетов на Linux необходимо обеспечить стабильный канал связи между клиентом и ключом. Это достигается за счет физического разделения конфликтующих ключей серии ORGL8, перехода на протокол TCP в настройках nnhasp.ini и отключения режимов энергосбережения USB на стороне сервера лицензий.