Рецепт для systemd: принудительный перезапуск сервиса по файловому флагу

в 10:13, , рубрики: systemd, системное администрирование

Задача:

  • имеется некий самописный сервис, запускаемый и отслеживаемый из systemd;
  • необходимо при появлении файла-флага рестартовать этот сервис;
  • делать это изнутри сервиса нельзя по религиозным соображениям.

Решение:
restart-myservice.service

[Unit]
Description=Restart my cool service

[Service]
Type=oneshot
ExecStartPre=/bin/rm -f /path/to/restart.flag
ExecStart=/bin/systemctl restart myservice.service

restart-myservice.path

[Unit]
Description=Path marker to restart my cool service

[Path]
PathExists=/path/to/restart.flag
Unit=restart-myservice.service

Не забудьте сказать systemctl start restart-myservice.path и прописать restart-myservice.path в параметр Wants управляемого сервиса.

Ограничения:
Юнит path работает через системный вызов notify, и если флаг по пути с симлинком, то при перестановке симлинка (был на каталог без флага, стал с флагом) он скорее всего не выстрелит, я не проверял.

Дополнительные материалы:
man systemd.path
man systemd.unit

Автор: 6opoga

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js