Файлы программных лицензий 1С на Linux: найти, проверить и вернуть
Содержание
Программные лицензии 1С в Linux хранятся в общем каталоге /var/1C/licenses/ (для всех пользователей компьютера) и в личном каталоге пользователя ~/.1cv8/1C/1cv8/conf/. Это обычные файлы с расширением .lic, имя которых состоит из цифр, например 20241015093412.lic. Сервер 1С ищет их в тех же местах, но от имени служебного пользователя, обычно usr1cv8.
Чаще всего лицензию «теряют» не потому, что файл исчез, а потому, что процесс 1С его не видит: файл лежит в домашнем каталоге другого пользователя или у службы нет прав на чтение. Ниже — где искать, как проверить, что файл рабочий, и что делать, если он пропал после сбоя диска.
Стандартные каталоги лицензий 1С в разных дистрибутивах
Пути не зависят от дистрибутива. В Ubuntu, Debian, Astra Linux, РЕД ОС, ALT Linux и CentOS платформа 8.3 ищет лицензии в одних и тех же местах. Меняется только способ установки пакетов, а не логика поиска.
| Каталог | Кто видит лицензию | Когда используется |
|---|---|---|
/var/1C/licenses/ | все пользователи компьютера и служба сервера 1С | основной вариант для сервера и общих рабочих мест |
~/.1cv8/1C/1cv8/conf/ | только этот пользователь | лицензия активирована «на себя» без прав на общий каталог |
/home/usr1cv8/.1cv8/1C/1cv8/conf/ | только служба сервера 1С | частный случай предыдущей строки: домашний каталог пользователя службы |
Домашний каталог пользователя службы бывает не в /home. Узнать его точно можно командой:
getent passwd usr1cv8 | cut -d: -f6
Если служба сервера у вас запущена от другого пользователя, подставьте его имя. Посмотреть, от кого работает агент сервера, можно так:
ps -o user,cmd -C ragent
Как найти все файлы лицензий на машине
Когда непонятно, куда мастер активации сохранил файл, проще всего пройтись поиском по всей файловой системе:
sudo find / -xdev -name "*.lic" -newermt "2015-01-01" 2>/dev/null | grep -i -E "1c|1cv8"
Фильтр grep убирает чужие .lic от других программ. Если ничего не нашлось, уберите -xdev: каталог /var или /home может быть смонтирован с отдельного раздела.
Платформа не требует, чтобы в каталоге был один файл. В /var/1C/licenses/ может лежать несколько .lic: например, лицензия сервера и комплект клиентских лицензий на 10 пользователей. Каждая активация даёт отдельный файл.
Владелец и права на файлы лицензии
Файл лицензии читает тот процесс, который запускает 1С. Для толстого или тонкого клиента
это пользователь, вошедший в систему. Для сервера — пользователь службы ragent, rmngr и rphost.
Типовая настройка общего каталога для сервера выглядит так:
sudo mkdir -p /var/1C/licenses
sudo chown -R usr1cv8:grp1cv8 /var/1C/licenses
sudo chmod 775 /var/1C/licenses
sudo chmod 664 /var/1C/licenses/*.lic
Смысл прав простой:
- 📁 каталог должен быть доступен на запись тому, кто активирует лицензию, иначе новый файл не сохранится;
- 📄 файлы должны быть доступны на чтение всем, кто запускает 1С на этом компьютере;
- 👤 группа
grp1cv8создаётся при установке сервера; если её нет, проверьте командойgetent group grp1cv8и при необходимости используйте группу, в которую входит пользователь службы.
На рабочей станции с несколькими пользователями удобнее дать каталогу права 755, а файлам — 644, и активировать лицензию
от администратора через sudo. Тогда обычные пользователи читают лицензию, но не могут её удалить.
Не ставьте chmod 777 «чтобы точно заработало». Любой пользователь сможет удалить или подменить файл, и вы узнаете об этом только при следующем запуске 1С.
Проверка прав от имени службы
Самый быстрый способ убедиться, что служба видит файл, — прочитать его её же правами:
sudo -u usr1cv8 ls -l /var/1C/licenses/
sudo -u usr1cv8 head -c 100 /var/1C/licenses/*.lic > /dev/null && echo "чтение работает"
Если команда вернула Permission denied, проблема в правах, а не в лицензии. Если система использует SELinux (РЕД ОС, CentOS), проверьте ещё и контекст файла командой ls -Z: после копирования из другого каталога он мог остаться чужим.
Проверка лицензий утилитой ring и консолью rac
Отдельного графического менеджера лицензий для Linux в платформе нет. Вместо него используют две консольные утилиты: ring для работы с самими файлами и rac для того, чтобы увидеть, какие лицензии реально выдал сервер.
Утилита ring: список, проверка, активация
Утилита ring ставится вместе с компонентами 1C:Enterprise и требует установленной Java. Если её нет в PATH, найдите исполняемый файл:
sudo find /opt -type f -name ring 2>/dev/null
Основные команды модуля лицензирования:
ring license list # перечень лицензий в стандартных каталогах
ring license info --name <имя_лицензии> # подробности: тип, число пользователей, владелец
ring license validate --name <имя_лицензии> # проверка, что лицензия подходит этому компьютеру
Имя лицензии берите из вывода ring license list. Запускайте команды от того пользователя, для которого проверяете лицензию: для сервера — через sudo -u usr1cv8. Иначе ring покажет содержимое личного каталога администратора, а не службы.
Команда ring license activate получает лицензию без графического интерфейса. Это выручает на сервере без рабочего стола. Параметров у неё много (пин-код, регистрационные данные, адрес, способ получения), поэтому перед запуском посмотрите их список:
ring license activate --help
Консоль rac: какие лицензии выдал сервер
Чтобы понять, какой файл сервер реально использует, посмотрите сеансы вместе с лицензиями:
rac cluster list
rac session list --cluster=<uuid_кластера> --licenses
В выводе для каждого сеанса есть поле full-name с полным путём к файлу лицензии, тип лицензии (программная или ключ HASP) и сервер, который её выдал. Это самый надёжный ответ на вопрос «откуда взялась лицензия»: вы видите не то, что лежит на диске, а то, что использовано.
Для rac должна работать служба ras (по умолчанию порт 1545). Если rac не подключается, проверьте, запущена ли она: systemctl status с именем службы RAS вашей установки.
Восстановление лицензии после сбоя диска и lost+found
Если после аварийного выключения или проверки диска fsck каталог /var/1C/licenses/ оказался пустым, файл мог уцелеть в каталоге lost+found того раздела, где лежит /var. Утилита fsck складывает туда «осиротевшие» файлы под именами вида #123456, без исходного названия.
Порядок действий:
- Найдите точку монтирования раздела с
/var:df /var. - Посмотрите, что лежит в
lost+foundэтого раздела, отобрав небольшие файлы:sudo find /lost+found -type f -size -20k -printf "%TY-%Tm-%Td %s %p\n" | sort - Сверьте даты изменения с датой активации лицензии. Файл лицензии маленький, обычно несколько килобайт.
- Скопируйте кандидата обратно с расширением
.licи выставьте права:sudo cp "/lost+found/#123456" /var/1C/licenses/restored.lic sudo chown usr1cv8:grp1cv8 /var/1C/licenses/restored.lic sudo chmod 664 /var/1C/licenses/restored.lic - Проверьте файл:
sudo -u usr1cv8 ring license list, затемring license validateпо его имени.
Если файл не нашёлся или не проходит проверку, остаётся повторное получение лицензии по тому же пин-коду. Его запускают тем же мастером, что и первую активацию, выбрав вариант повторного получения. Регистрационные данные (организация, ИНН, ФИО, адрес) нужно ввести так же, как при первой активации, иначе повторное получение не пройдёт. Эти данные стоит сохранить заранее, вместе с пин-кодами из комплекта поставки.
Число повторных активаций по одному пин-коду ограничено. Если лимит исчерпан, лицензию восстанавливают через партнёра, у которого её покупали, или через центр лицензирования, предъявив документы о покупке.
Восстановленный из lost+found файл работает, только если оборудование не изменилось. После замены диска, сетевой карты или переноса виртуальной машины на другой хост лицензия перестаёт соответствовать компьютеру, и нужна повторная активация.
Как не попадать в эту ситуацию
- 💾 включите
/var/1C/licenses/и личные каталоги~/.1cv8/1C/1cv8/conf/в резервное копирование ; - 📝 храните пин-коды и регистрационные данные отдельно от сервера;
- 🐳 в контейнерах держите каталог лицензий на постоянном томе и не меняйте параметры окружения контейнера, к которым привязана лицензия, между перезапусками.
Простейшая копия делается одной командой:
sudo tar czf /root/1c-licenses-$(date +%F).tar.gz /var/1C/licenses
Лицензии в кластере из нескольких серверов 1С
В кластере лицензии бывают двух видов, и хранятся они по-разному.
| Лицензия | Где лежит файл | Что важно |
|---|---|---|
| Лицензия на сервер 1С | на каждом рабочем сервере, в его /var/1C/licenses/ | у каждого рабочего сервера своя, привязана к его оборудованию |
| Клиентские лицензии | на сервере, который выдаёт клиентские лицензии | клиенты получают их по сети, файлы на рабочих местах не нужны |
Каким сервером выдавать клиентские лицензии, задают в требованиях назначения функциональности рабочего сервера: для типа объекта «Клиентская лицензия». Если правил нет, лицензию может выдать любой рабочий сервер кластера, но только из тех файлов, что лежат у него на диске. Отсюда частая ловушка: клиентские лицензии активированы на одном сервере, а сеанс попал на другой, где их нет.
Есть два рабочих варианта:
- Держать все клиентские лицензии на одном сервере и назначить ему функциональность «Клиентская лицензия» с требованием «Назначать».
- Разнести комплекты по серверам осознанно и учитывать, что лимит пользователей считается по каждому серверу отдельно.
Выдача лицензий сервером включается и в свойствах самой информационной базы. Если там выдача запрещена, клиент будет искать лицензию у себя на компьютере. В Linux свойство меняют через rac infobase update; точное имя параметра посмотрите в rac help infobase, оно зависит от версии платформы.
После изменения требований назначения функциональности новые правила применяются к новым сеансам. Не перезапускайте службу сервера в рабочее время, чтобы «ускорить» процесс: оборвутся все сеансы пользователей. Если перезапуск нужен, делайте его вне рабочих часов и предупредите людей заранее.
Диагностика ошибок лицензирования и логи
Типичный симптом — окно Не обнаружена лицензия для использования программы при запуске. Причин немного, и их удобно проверять по порядку.
Технологический журнал: событие LIC
Когда причина неочевидна, включите технологический журнал с событием LIC. В него попадают попытки получить лицензию: какой каталог проверялся, какой файл найден и почему он не подошёл.
Создайте файл logcfg.xml в каталоге conf установленной платформы (например, /opt/1cv8/conf/ для платформ 8.3.20 и новее):
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="/var/log/1c/techlog" history="24">
<event>
<eq property="name" value="LIC"/>
</event>
<property name="all"/>
</log>
</config>
Каталог для журнала создайте заранее и отдайте его пользователю службы:
sudo mkdir -p /var/log/1c/techlog
sudo chown usr1cv8:grp1cv8 /var/log/1c/techlog
Платформа перечитывает настройки журнала сама, перезапуск службы не нужен. Воспроизведите ошибку, посмотрите свежие файлы .log в подкаталогах и сразу выключите журнал, удалив logcfg.xml: при большой нагрузке он быстро растёт.
Если используется ключ HASP
Аппаратные ключи на Linux работают через драйвер Sentinel. Проверка:
systemctl status aksusbd
В браузере на этом же сервере откройте http://localhost:1947: в списке ключей должен появиться ваш. Для сетевого ключа клиенту нужен файл nethasp.ini с адресом сервера ключей в каталоге conf платформы.