У нас есть довольно сложный системный сервис с Type=notify
. Изредка служба зависает при запуске / перезапуске и вводит failed
состояние после сбоя systemd для получения sd_notify
вызов. В этих случаях мы бы хотели перезапустить сервис - есть вероятность, что второй раз он запустится правильно.
Однако systemd.service (5) страница руководства говорит:
Когда смерть процесса является результатом операции systemd (например, остановка или перезапуск службы), служба не будет перезапущена.
Есть ли способ обойти это ограничение в конфигурации systemd? В противном случае нам придется отслеживать статус демона и вручную перезапускать его каждый раз, когда он застревает, или разрабатывать для этого какой-то сценарий супервизора, который может привести к увеличению количества точек отказа в системе.
Нет, нет возможности.
Это мера безопасности, чтобы избежать зависания процесса перезапуска в случае повреждения файла конфигурации после ручного вмешательства.
Есть опция Restart =, но для того, чтобы она сработала, процесс должен сразу запуститься.
Поэтому лучший способ для вас - проверить, почему ваша служба иногда зависает при запуске или перезапуске, и решить эту проблему.
Если вы не можете этого сделать, вы можете написать простую оболочку-оболочку с бесконечным циклом для запуска службы или, что может быть лучше, настроить локальный экземпляр программы мониторинга службы, такой как Monit.