Назад | Перейти на главную страницу

Настройка systemd для перезапуска процессов с истекшим временем ожидания

У нас есть довольно сложный системный сервис с Type=notify. Изредка служба зависает при запуске / перезапуске и вводит failed состояние после сбоя systemd для получения sd_notify вызов. В этих случаях мы бы хотели перезапустить сервис - есть вероятность, что второй раз он запустится правильно.

Однако systemd.service (5) страница руководства говорит:

Когда смерть процесса является результатом операции systemd (например, остановка или перезапуск службы), служба не будет перезапущена.

Есть ли способ обойти это ограничение в конфигурации systemd? В противном случае нам придется отслеживать статус демона и вручную перезапускать его каждый раз, когда он застревает, или разрабатывать для этого какой-то сценарий супервизора, который может привести к увеличению количества точек отказа в системе.

Нет, нет возможности.

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

Есть опция Restart =, но для того, чтобы она сработала, процесс должен сразу запуститься.

Поэтому лучший способ для вас - проверить, почему ваша служба иногда зависает при запуске или перезапуске, и решить эту проблему.

Если вы не можете этого сделать, вы можете написать простую оболочку-оболочку с бесконечным циклом для запуска службы или, что может быть лучше, настроить локальный экземпляр программы мониторинга службы, такой как Monit.