Настройка автозапуска и автообновления Pilot-Server с помощью systemd

Один из способов настройки автозапуска и автообновления реализуется через подсистему инициализации Linux systemd.

Концепция настройки юнитов (модулей) systemd

Предлагаем следующую концепцию настройки systemd для автозапуска и автообновления Pilot Server:

За автозапуск и автообновление Pilot-Server отвечают два юнита systemd:

pilot-server.service – автоматически запускает Pilot-Server после перезагрузки (юнит приведен в состояние enabled), поддерживает его работу и останавливает для обновления.

pilot-update.service – выключен на старте (disabled), стартует по команде скрипта startUpdateProcess.sh и запускает процесс обновления Pilot-Server.

Процесс обновления происходит следующим образом:

  • Клиент Pilot-myAdmin выполняет скрипт startUpdateProcess.sh на сервере.
  • Скрипт запускает сервис pilot-update.service.
  • Сервис выполняет скрипт updateScript.sh, который запускает процесс обновления:
    • останавливает работу сервиса pilot-server.service;
    • распаковывает загруженный архив Pilot-update*.zip, полученные из архива файлы заменяют существующие файлы сервера — происходит обновление;
    • снова стартует сервис pilot-server.service, запускающий сервер;
    • останавливает работу сервиса обновления pilot-update.service.

Скрипт обновления updateScript.sh

Для того, чтобы скрипт updateScript.sh не перезаписывался при обновлении, скопируйте его из папки, в которую установлен сервер, в папку /opt/pilot-server/bin:

# cp /opt/pilot-server/updateScript.sh /opt/pilot-server/bin

Юниты pilot-server.service и pilot-update.service

Создайте юниты pilot-server.service и pilot-update.service в /etc/systemd/system:

pilot-server.service

[Unit]

Description=ASCON Pilot-Server

After=network.target

 

[Service]

User=pilotuser

Group=pilotuser

Type=simple

WorkingDirectory=/opt/pilot-server

Restart=always

RestartSec=3

ExecStart=/opt/pilot-server/Ascon.Pilot.Daemon /opt/pilot-server/settings.xml

ExecStop=/bin/kill -s 3 $MAINPID

 

[Install]

WantedBy=multi-user.target

pilot-update.service

[Unit]

Description=ASCON Pilot-Update

After=network.target

 

[Service]

User=pilotuser

Group=pilotuser

Type=oneshot

RemainAfterExit=yes

WorkingDirectory=/opt/pilot-server

ExecStart=/bin/sh /opt/pilot-server/bin/updateScript.sh /opt/pilot-server/Update /opt/pilot-server

 

[Install]

WantedBy=multi-user.target

Создавая юниты с именами, которые отличаются от предложенных, обратите внимание на то, что имена в скриптах, юнитах systemd и файле конфигурации sudoers должны быть изменены соответственно.

Подключение модулей

Включите автозапуск сервиса pilot-server.service:

# systemctl enable pilot-server.service

Не включайте автозапуск сервиса pilot-update.service.

Перезагрузите демон:

# systemctl daemon-reload

Наделение пользователя pilotuser правами запуска сервисов systemd

Задайте пользователю pilotuser права запускать и останавливать сервисы Pilot-Server. Для этого необходимо скорректировать содержимое файла sudoers с помощью visudo:

# visudo

Добавьте в файл конфигурации cледующие строки:

Cmnd_Alias PIL_CMDS = /bin/systemctl start pilot-update.service, /bin/systemctl stop pilot-update.service, /bin/systemctl start pilot-server.service, /bin/systemctl stop pilot-server.service

pilotuser ALL=(ALL) NOPASSWD: PIL_CMDS

Это позволит пользователю pilotuser запускать добавленные сервисы без запроса пароля.