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

systemd: запускать другой юнит, когда юнит выходит

Скажем, у меня есть единица foo.service что я хочу бежать за bar.service выходы (с любым статусом, успешным или неудачным). я так не думаю After= или Before= поможет мне здесь. Как я могу сделать это в systemd, а не в скрипте, запущенном systemd?

Для контекста в моем окружении скажем bar.service терпит неудачу и имеет линию OnFailure=foo.service заставить foo.service исправить проблемы, а затем запустить bar.service очередной раз.

Вы можете (вероятно) использовать ExecStopPost=

Дополнительные команды, которые выполняются после остановки службы. Сюда входят случаи, когда команды, настроенные в ExecStop= использовались там, где у сервиса нет ExecStop= определены, или где служба неожиданно завершила работу. Этот аргумент принимает несколько командных строк по той же схеме, что и для ExecStart=. Использование этих настроек необязательно. Поддерживается подстановка спецификаторов и переменных среды. Обратите внимание, что - в отличие от ExecStop= - команды, указанные в этом параметре, вызываются, когда служба не запускается правильно и снова закрывается.

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

Обратите внимание, что все команды, настроенные с помощью этого параметра, вызываются с кодом результата службы, а также с кодом выхода и статусом основного процесса, установленными в $SERVICE_RESULT, $EXIT_CODE и $EXIT_STATUS переменные среды, см. systemd.exec (5) для подробностей.