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

30.06.21

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

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

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

Наименование Файл Версия Размер
srv1cv83@.service
.service 1,65Kb
1
.service 1,65Kb 1 Скачать

На Инфостарте не единожды поднималась тема запуска нескольких экземпляров сервера 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=default
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/default

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

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

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

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

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

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

После установки новой версии (если вы обновили пакеты сервера) вам потребуется изменить ссылку /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@default необходимо поменять номера портов запуска процессов сервера 1С (увеличив все значения на 1000), тогда мы создаем файл /etc/systemd/system/srv1cv83@default.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/default

 

См. также

Автоматическое монтирование целевых папок по ключу при изменении местоположения источника (раздела диска)

Linux Бесплатно (free)

Вариант динамического автоматического монтирование целевых папок по ключу папки при изменении местоположения источника (раздела диска).

16.11.2023    253    NeSPEC    3    

2

Рестарт сервера 1С с очисткой сеансовых данных на Linux посредством systemd

Linux Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

12.09.2023    2716    0    Sloth    5    

21

Запуск сервера хранилища конфигураций и сервера удаленного управления на Linux, посредством systemd

Linux Сервера Платформа 1С v8.3 Абонемент ($m)

Сказ о том, как сделать "кошерный" запуск серверов хранилища конфигураций (вдруг еще кто-то до сих пор пользуется) и удаленного администрирования под GNU/Linux с использованием systemd

1 стартмани

07.09.2023    3486    Sloth    0    

19

Перенаправление вывода журнала регистрации

Linux Журнал регистрации Платформа 1С v8.3 Бесплатно (free)

Экспериментируем с реализацией драйвера текстового устройства под Linux для перенаправления вывода журнала регистрации.

07.08.2023    968    Lars Ulrich    1    

16

Переход с 1С:Шины 2.1.1 на 3.1.1 под Ubuntu [Квест]

Linux Администрирование СУБД Бесплатно (free)

О том, как переход с 2.1.1 на 3.1.1 оказался нелегким из-за соблюдения рекомендаций.

24.05.2023    2138    dsdred    0    

13

Midnight Commander, установленный с Entware, не выполняет команды и не запускает файлы

Администрирование веб-серверов Linux Бесплатно (free)

Столкнулся с проблемой, установил на роутер Midnigt Commander с репозитория Entware, при попытке выполнения команды программа пишет ошибку "The shell is already running a command". Данная публикация описывает способ решения этой проблемы.

20.03.2023    1573    Eugen-S    2    

3

Развертывание Linux сервера с community-версией платформы

Linux Платформа 1С v8.3 Бесплатно (free)

Сценарий подготовки рабочего места разработчика с платформой версии 8.3.23 с community-лицензией для разработки и отладки конфигураций в клиент-серверном режиме с сервером, работающим на базе Linux+PostrgeSQL.

03.01.2023    12492    Akcium    55    

180
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Error34 55 10.12.20 16:11 Сейчас в теме
Прикольно, только один момент немного неудобен, keytab с таким конфигом придется класть в каждую платформу, намного удобнее вынести его хоть даже в домашний каталог учетки запуска 1С или в /opt/1C (/opt/1cv83), дать права и тогда лишняя операция при установке и запуске новой платформы отпадет.
PS для масс: это я про доменную авторизацию, которую многие не используют
2. Sloth 370 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 370 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 29 30.04.21 10:22 Сейчас в теме
(6) ошибка в написании значения Environment
Environment=SRV1CV8_DEBUG=-debug
amw; Sloth; +2 Ответить
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 370 08.07.21 12:32 Сейчас в теме
(8) Уберите
PrivateTmp=yes

из секции [Service]
10. user1921424 13.03.23 19:22 Сейчас в теме
Подскажите, как быть с версиями 8.3.21 и старше? В этих версиях изменился способ регистрации юнита и т.д. Есть ли подобный способ для этих версий?
11. Sloth 370 14.03.23 09:43 Сейчас в теме
(10) Вы можете использовать этот же файл сервиса без каких-либо изменений, при этом игнорируйте файл сервиса "из коробки"!
12. nik6841 08.07.23 13:38 Сейчас в теме
Здравствуйте.
Спасибо, с вашим файлом все заработало)
Centos7.5, устанавливал сервер 8.3.22.2143 по инструкции ИТС. А вот с запуском компонентов системы по https://its.1c.ru/db/v8322doc#bookmark:cs:TI000000123 не получилось, причем аналогичный печальный опыт был и с 8.3.21, и проблема с пунктами инструкции по созданию ссылки и добавлении в автозагрузку:
"# systemctl link /opt/1cv8/x86_64/8.3.22.2143/srv1cv8-8.3.22.2143@default.service
# systemctl enable srv1cv8-8.3.22.2143@default.service"
После этого лезет ошибка Too many levels of symbolic links и сервис в автозагрузку не добавляется.
Что не так в инструкции или, видимо, в руках? можете подсказать?
(11)
13. user1080705 30.08.23 14:05 Сейчас в теме
(12) systemctl enable /opt/1cv8/x86_64/8.3.22.2143/srv1cv8-8.3.22.2143@.service
Оставьте свое сообщение