Запуск нескольких экземпляров сервера 1С на GNU/Linux посредством systemd

Публикация № 1341653 10.12.20

Системное администрирование - Linux

Сказ о том, как сделать "кошерный" запуск сервера 1С на GNU/Linux для версии платформы 8.3.18 и выше, которая позволяет устанавливать одновременно пакеты нескольких версий.

На Инфостарте не единожды поднималась тема запуска нескольких экземпляров сервера 1С под GNU/Linux и даже я на этом поприще успел отметится здесь

Однако в настоящем опусе речь пойдет про механизм запуска сервера 1С, который вендор до сих пор ни как не решится включить в "коробку", не смотря на явные его преимущества

Так как при установке пакетов сервера версии 8.3.18 скрипты инициализации (запуска/остановки сервера 1С) автоматически не устанавливаются и их требуется копировать вручную (о чем писано на ИТС), то предлагаемый ниже способ не будет конфликтовать с решением от 1С

ВАЖНО: Изложенная ниже информация относится к серверу 1С 64-х разрядной версии, если у вас 32-х разрядный, придется внести некоторые коррективы в приведенные здесь файлы!

Первым делом помещаем в каталог /etc/systemd/system файл шаблона сервиса srv1cv83@.service следующего содержания

[Unit]
Description=1C:Enterprise Server 8.3 (%I)
Requires=network.target

[Service]
Type=simple
User=usr1cv8
Group=grp1cv8

# Path to directory with claster data
Environment=SRV1CV8_DATA=/home/usr1cv8/.1cv8/1C/1cv8/

# Number of the cluster port created by default during first
# launch of ragent
Environment=SRV1CV8_PORT=1540

# Number of cluster agent main port. This port is used by the
# cluster console to address the central server. Cluster agent
# port is also specified as the IP port of the working server.
Environment=SRV1CV8_REGPORT=1541

# Port range for connection pool
Environment=SRV1CV8_RANGE=1560:1591

# Security level:
# 0 - unprotected connections
# 1 - protected connections only for the time of user
#    authentication
# 2 - permanently protected connections
Environment=SRV1CV8_SECLEV=0

# 1C:Enterprise server configuration debug mode
# blank - default - debug mode is off
# -debug - debug mode is on
#
Environment=SRV1CV8_DEBUG=

# Check period for connection loss detector, milliseconds
Environment=SRV1CV8_PING_PERIOD=1000

# Response timeout for connection loss detector, milliseconds
Environment=SRV1CV8_PING_TIMEOUT=5000

# 1C:Enterprise server keytab file.
# default - usr1cv83.keytab file in 1C:Enterprise server
#          installation directory
Environment=KRB5_KTNAME=/opt/1cv8/x86_64/%I/usr1cv8.keytab

ExecStart=/bin/sh -c "/opt/1cv8/x86_64/%I/ragent -d ${SRV1CV8_DATA} -port ${SRV1CV8_PORT} -regport ${SRV1CV8_REGPORT} -range ${SRV1CV8_RANGE} \
-seclev ${SRV1CV8_SECLEV} -pingPeriod ${SRV1CV8_PING_PERIOD} -pingTimeout ${SRV1CV8_PING_TIMEOUT} ${SRV1CV8_DEBUG}"
Restart=always
RestartSec=5

[Install]
DefaultInstance=current
WantedBy=multi-user.target

Если вы установили пакеты, например, версии 8.3.18.1208, то для запуска сервера 1С потребуется выполнить следующую команду

$ sudo systemctl start srv1cv83@8.3.18.1208

Чтобы прописать данный сервис в автозапуск необходимо выполнить команду

$ sudo systemctl enable srv1cv83@8.3.18.1208

В случае, если у вас нет нужды запускать несколько экземпляров сервиса с разной версией платформы, а вы просто хотите управлять запуском и остановкой сервиса через systemd, то это можно осуществить следующим образом:

установив нужную версию платформы (например 8.3.18.1208), сделать следующую символьную ссылку

$ sudo ln -s /opt/1cv8/x86_64/8.3.18.1208 /opt/1cv8/x86_64/current

в таком случае управлять сервисом можно с помощью экземпляра srv1cv83@current командами вида

$ sudo systemctl enable srv1cv83@current  # Включить автозапуск сервиса

$ sudo systemctl start srv1cv83@current   # Запустить сервис

$ sudo systemctl stop srv1cv83@current    # Остановить сервис

$ sudo systemctl status srv1cv83@current  # Посмотреть статус сервиса

$ sudo journalctl -ex -u srv1cv83@current # Посмотреть журнал событий сервиса

После установки новой версии (если вы обновили пакеты сервера) вам потребуется изменить ссылку /opt/1cv8/x86_64/current, так чтобы она ссылалась на каталог с новой версией платформы, что позволит и дальше работать с экземпляром srv1cv83@current не меняя более никаких настроек

Если в каком-то экземпляре сервиса необходимо изменить параметры запуска, то для этого можно создать каталог для "drop-in" файлов настроек

Так, например, чтобы включить режим отладки для экземпляра сервиса srv1cv83@8.3.18.1208 требуется создать файл /etc/systemd/system/srv1cv83@8.3.18.1208.service.d/debug.conf (имя файла может быть любым, главное чтобы расширение было .conf) следующего содержания

[Service]
Environment=SRV1CV8_DEBUG=-debug

Если, например, нам для экземпляра srv1cv83@current необходимо поменять номера портов запуска процессов сервера 1С (увеличив все значения на 1000), тогда мы создаем файл /etc/systemd/system/srv1cv83@current.service.d/ports.conf (имя файла может быть любым, главное чтобы расширение было .conf) и помещаем туда следующий текст

[Service]
Environment=SRV1CV8_PORT=2540
Environment=SRV1CV8_REGPORT=2541
Environment=SRV1CV8_RANGE=2560:2591

Если же вы хотите изменить параметры опроса агентом сервера процессов кластера для всех экземпляров сервиса, тогда достаточно создать файл /etc/systemd/system/srv1cv83@.service.d/pings.conf (каталог srv1v83@.service.d носит имя файла шаблона сервиса, а не его экземпляра, имя файла настроек может быть любым, главное чтобы расширение было .conf) следующего содержания

[Service]
Environment=SRV1CV8_PING_PERIOD=3000
Environment=SRV1CV8_PING_TIMEOUT=15000

На этом, пожалуй, все!

Дальше, выбор за вами, какой механизм запуска сервера 1С использовать у себя ...

Надеюсь, данный материал будет полезен для сообщества!

Исходная тема есть на Партнерском форме 1С, так что у кого есть доступ и кто разделяет подход, описанный в статье, давайте вместе "двигать" 1С в правильном направлении ;)

 

P.S. "Прикрутить" данный механизм запуска к платформе версий ниже 8.3.18 не составляет особого труда, для этого необходимо изменить в параметре ExecStart каталог из которого осуществляется запуск ragent

ExecStart=/bin/sh -c "/opt/1C/%I/x86_64/ragent -d ${SRV1CV8_DATA} -port ${SRV1CV8_PORT} -regport ${SRV1CV8_REGPORT} \
-range ${SRV1CV8_RANGE} -seclev ${SRV1CV8_SECLEV} -pingPeriod ${SRV1CV8_PING_PERIOD} -pingTimeout ${SRV1CV8_PING_TIMEOUT} ${SRV1CV8_DEBUG}"

и сделать символьную ссылку

$ sudo ln -s /opt/1C/v8.3 /opt/1C/current

 

Скачать файлы

Наименование Файл Версия Размер
srv1cv83@.service

.service 1,65Kb
5
.service 1,65Kb 5 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Error34 55 10.12.20 16:11 Сейчас в теме
Прикольно, только один момент немного неудобен, keytab с таким конфигом придется класть в каждую платформу, намного удобнее вынести его хоть даже в домашний каталог учетки запуска 1С или в /opt/1C (/opt/1cv83), дать права и тогда лишняя операция при установке и запуске новой платформы отпадет.
PS для масс: это я про доменную авторизацию, которую многие не используют
2. Sloth 304 11.12.20 10:34 Сейчас в теме
(1) значение взято из стандартного /etc/sysconfig/srv1cv83, но это же не проблема его изменить :)

Я, сказать честно, не пользуюсь данным механизмом, посему никак про "удобство" не подумал :(
3. Error34 55 11.12.20 10:47 Сейчас в теме
(2)
но это же не проблема его изменить :)

Полностью согласен.
Мы пользуемся, поэтому на стандартных конфигах запуска демона, я этот параметр меняю. Как дойдем до 8.3.18 хотябы на сервере разработки, попробую так стартовать как у вас в статье, как минимум это более удобно, да и RAS и сервера хранилищ конфигураций и ещё кое-что всё равно демонизируем через systemd
4. NickRomancer 21.12.20 10:00 Сейчас в теме
установив нужную версию платформы (например 8.3.18.1208), сделать следующую символьную ссылку

$ sudo ln -s /opt/1cv83/x86_64/8.3.18.1208 /opt/1cv83/x86_64/current

У меня платформа 8.3.18.1208 ставится в /opt/1cv8

Также потом почему-то
# systemctl status srv1cv83*current

выдаёт не так как на Вашем скриншоте, /opt/1cv8/x86_64/current/ragent вместо ожидаемого /opt/1cv8/x86_64/8.3.18.1208/ragent
srv1cv83*current.service - 1C:Enterprise Server 8.3 (current)
Loaded: loaded (/etc/systemd/system/srv1cv83*.service; enabled; vendor preset: disabled)
Active: active (running) since Пн 2020-12-21 09:56:58 MSK; 7min ago
Main PID: 8136 (ragent)
CGroup: /system.slice/system-srv1cv83.slice/srv1cv83*current.service
├─8136 /opt/1cv8/x86_64/current/ragent -d /home/usr1cv8/.1cv8/1C/1cv8/ -port 1540 -regport 1541 -range 1560:1591 -seclev 0 -pingPeriod 1000 -ping...
├─8154 /opt/1cv8/x86_64/8.3.18.1208/rmngr -port 1541 -host server1c -range 1560:1591 -d /home/usr1cv8/.1cv8/1C/1cv8/ -clstid 7bc075d5-eeb5-4b41-8...
└─8289 /opt/1cv8/x86_64/8.3.18.1208/rphost -range 1560:1590 -reghost server1c -regport 1541 -pid 9c469a15-1424-4600-90d9-27a751ace392

дек 21 09:56:58 server1c systemd[1]: Started 1C:Enterprise Server 8.3 (current).
5. Sloth 304 21.12.20 12:04 Сейчас в теме
(4)
У меня платформа 8.3.18.1208 ставится в /opt/1cv8

Моя опечатка, поправлю ...
выдаёт не так как на Вашем скриншоте,

У Вас выдает все правильно, - тот "каталог" с которого агент запускается.

Скриншот в заголовке статьи сделан на 8.3.17.1851, так что тут сравнивать как-то не приходится ;)
6. amw 05.04.21 16:07 Сейчас в теме
Добрый день!

Немного с опозданием вопрос:

Как увидеть, что на сервере включен ражим отладки? Я указал параметр Environment=SRV1CV8_DEBUG==debug и сделал рестарт службы 1с. Вывод systemctl status srv1cv83@current не дает об этом информацию. Также как и команда: ps -aux| grep 1c.
7. kirillkr 28 30.04.21 10:22 Сейчас в теме
(6) ошибка в написании значения Environment
Environment=SRV1CV8_DEBUG=-debug
8. metallicswar 08.07.21 03:27 Сейчас в теме
При запуске службы сервера через unit 1С ни в какую не хочет работать с локальными серверными hasp ключами. Есть мысли почему так и как это побороть? Используются две службы: 8.3.18.1483 и 8.3.15.2107, обе при запуске с помощью unit не видят локальный hasp. Целый день бился, не мог понять что не так, перепробовал разные драйвера hasp, попробовал запуск через init.d и волшебство, ключ сразу подхватился.
9. Sloth 304 08.07.21 12:32 Сейчас в теме
(8) Уберите
PrivateTmp=yes

из секции [Service]
Оставьте свое сообщение

См. также

Обслуживание баз данных 1C на Postgresql под Astra Linux Промо

Администрирование СУБД Инструменты администратора БД Linux Платформа 1С v8.3 Абонемент ($m)

Эта публикация для тех специалистов 1С, которые развернули сервер 1С и сервер PostgreSQL под Astra Linux и которым не интересно работать в командной строке, выполняя «шаманские» скрипты для автоматического сохранения и восстановления баз. Возможно вам тоже будет удобно обслуживать базы данных PostgreSQL решением на платформе 1С.

10 стартмани

14.06.2022    2129    5    alfanika    9    

Командная строка Linux

Linux Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Выполнение команд bash операционной системы Linux из 1С, а также получение результата в переменную 1C.

2 стартмани

04.03.2022    1498    11    user-z99999    1    

Интерфейс к утилите администрирования кластера серверов для ОС Linux

Linux Сервера Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация сценария администрирования кластера серверов для ОС Linux при СУБД - PostgreSQL.

1 стартмани

21.01.2021    3502    4    masterb    0    

Управление серверами (консоль Linux)

Linux Сервера Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Конфигурация-консоль администрирования кластера серверов 1С Linux.

1 стартмани

28.12.2020    4804    10    m_aster    0    

Запуск нескольких экземпляров сервера 1С Предприятия 8.3 разных релизов на одном Linux-сервере

Инструменты администратора БД Платформа 1С v8.3 Бесплатно (free)

Несколько слов о том, КАК это сделать, для тех кто сильно далек от GNU/Linux.

05.09.2019    8270    Sloth    13