Odpowiedzi:
W OnFailure=
sekcji znajduje się dyrektywa [Unit]
udokumentowana w systemd.unit (5) . Jest on zdefiniowany w następujący sposób:
Rozdzielona spacjami lista jednej lub więcej jednostek, które są aktywowane, gdy jednostka przechodzi w stan „awarii”.
(W OnFailureJobMode=
tej samej sekcji znajduje się również dyrektywa, która pozwala ustawić tryb pracy dla aktywacji OnFailure = jednostek.)
/etc/systemd/system
i umieść jej nazwę w OnFailure=
dyrektywie.
Możesz także użyć ExecStopPost
do uruchomienia polecenia zamiast uruchamiania jednostki.
Nie byłem zadowolony z tego OnFailure
ustawienia, więc szukałem i znalazłem ExecStopPost
.
Poniższy prawdziwy przykład, jeśli główne zadanie nie powiedzie się, systemd uruchomi git
polecenie.
[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 = Dodatkowe polecenia, które są wykonywane po zatrzymaniu usługi. Obejmuje to przypadki, w których użyto poleceń skonfigurowanych w ExecStop =, w których usługa nie ma zdefiniowanego ExecStop = lub usługa została nieoczekiwanie zamknięta. Ten argument przyjmuje wiele wierszy poleceń, zgodnie z tym samym schematem, co opisany dla ExecStart =. Korzystanie z tych ustawień jest opcjonalne. Obsługiwane jest podstawianie specyfikatora i zmiennych środowiskowych. Zauważ, że - w przeciwieństwie do ExecStop = - polecenia określone z tym ustawieniem są wywoływane, gdy usługa nie uruchomi się poprawnie i zostanie ponownie zamknięta.
Zaleca się stosowanie tego ustawienia do operacji czyszczenia, które będą wykonywane nawet wtedy, gdy usługa nie uruchomi się poprawnie. Polecenia skonfigurowane z tym ustawieniem muszą być w stanie działać, nawet jeśli usługa nie uruchomi się w połowie i pozostawi nie dokończone dane. Ponieważ procesy usługi zostały zakończone już podczas wykonywania poleceń określonych z tym ustawieniem, nie powinny próbować się z nimi komunikować.
Zauważ, że wszystkie polecenia skonfigurowane z tym ustawieniem są wywoływane z kodem wynikowym usługi, a także kodem wyjścia i statusem głównego procesu ustawionym w zmiennych środowiskowych $ SERVICE_RESULT, $ EXIT_CODE i $ EXIT_STATUS, patrz systemd.exec (5) w celu uzyskania szczegółowych informacji.