Настройка автозапуска и автообновления 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 запускать добавленные сервисы без запроса пароля.