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

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

Администрирование - Системное администрирование - 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
PrivateTmp=yes

[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,67Kb
1
.service 1,67Kb 1 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Error34 55 10.12.20 16:11 Сейчас в теме
Прикольно, только один момент немного неудобен, keytab с таким конфигом придется класть в каждую платформу, намного удобнее вынести его хоть даже в домашний каталог учетки запуска 1С или в /opt/1C (/opt/1cv83), дать права и тогда лишняя операция при установке и запуске новой платформы отпадет.
PS для масс: это я про доменную авторизацию, которую многие не используют
2. Sloth 233 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 233 21.12.20 12:04 Сейчас в теме
(4)
У меня платформа 8.3.18.1208 ставится в /opt/1cv8

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

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

Скриншот в заголовке статьи сделан на 8.3.17.1851, так что тут сравнивать как-то не приходится ;)
Оставьте свое сообщение

См. также

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

Администрирование данных 1С Linux v8 1cv8.cf Абонемент ($m)

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

2 стартмани

21.01.2021    616    1    masterb    0    

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

Администрирование данных 1С v8 Бесплатно (free)

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

05.09.2019    5481    Sloth    11