Ответы:
В OnFailure=разделе есть директива [Unit], документированная в systemd.unit (5) . Это определяется следующим образом:
Разделенный пробелами список из одного или нескольких модулей, которые активируются, когда этот модуль переходит в состояние «сбой».
(Также есть OnFailureJobMode=директива в том же разделе, которая позволяет установить режим работы для активации OnFailure = единиц.)
/etc/systemd/systemи поместите ее имя в OnFailure=директиву.
Вы также можете использовать ExecStopPost для запуска команды напрямую, вместо запуска модуля.
Я не был счастлив с OnFailure обстановкой, поэтому я продолжал искать и нашел ExecStopPost.
Следующий реальный пример: если главная задача не выполняется, то systemd запустит gitкоманду.
[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service
[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter
User=root
# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer
# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .
Restart=always
RestartSec=10
KillSignal=SIGKILL
[Install]
WantedBy=multi-user.target
https://www.freedesktop.org/software/systemd/man/systemd.service.html
ExecStopPost = Дополнительные команды, которые выполняются после остановки службы. Это включает случаи, когда команды, настроенные в ExecStop =, использовались, когда для службы не определен ExecStop =, или когда служба неожиданно завершила работу. Этот аргумент принимает несколько командных строк, следуя той же схеме, как описано для ExecStart =. Использование этих настроек не является обязательным. Подстановка спецификатора и переменной среды поддерживается. Обратите внимание, что, в отличие от ExecStop =, команды, указанные в этом параметре, вызываются, когда служба не запускается правильно и снова закрывается.
Рекомендуется использовать этот параметр для операций очистки, которые должны выполняться, даже если служба не запустилась правильно. Команды, настроенные с помощью этого параметра, должны работать, даже если служба не запустилась на полпути и оставила не полностью инициализированные данные. Поскольку процессы службы были прерваны уже при выполнении команд, указанных с этим параметром, они не должны пытаться связаться с ними.
Обратите внимание, что все команды, настроенные с помощью этого параметра, вызываются с кодом результата службы, а также с кодом завершения и состоянием основного процесса, установленными в переменных среды $ SERVICE_RESULT, $ EXIT_CODE и $ EXIT_STATUS, см. Systemd.exec (5) для деталей.