Скажем, у меня есть единица 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) для подробностей.