Risposte:
C'è una OnFailure=
direttiva nella sezione [Unit]
, documentata in systemd.unit (5) . È definito come segue:
Un elenco separato da spazi di una o più unità che vengono attivate quando questa unità entra nello stato "non riuscito".
(C'è anche una OnFailureJobMode=
direttiva nella stessa sezione che consente di impostare la modalità di lavoro per l'attivazione di OnFailure = unità.)
/etc/systemd/system
e inserisci il suo nome nella OnFailure=
direttiva.
È inoltre possibile utilizzare ExecStopPost
per eseguire direttamente un comando invece di avviare un'unità.
Non ero contento OnFailure
dell'ambientazione, quindi ho continuato a cercare e trovare ExecStopPost
.
Il seguente esempio reale, se l'attività principale non riesce, systemd eseguirà un git
comando.
[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 = Comandi aggiuntivi che vengono eseguiti dopo l'arresto del servizio. Ciò include i casi in cui sono stati utilizzati i comandi configurati in ExecStop =, in cui il servizio non ha alcun ExecStop = definito o in cui il servizio è uscito inaspettatamente. Questo argomento utilizza più righe di comando, seguendo lo stesso schema descritto per ExecStart =. L'uso di queste impostazioni è facoltativo. È supportata la sostituzione di variabili identificatore e ambiente. Si noti che - diversamente da ExecStop = - i comandi specificati con questa impostazione vengono richiamati quando un servizio non si avvia correttamente e viene nuovamente chiuso.
Si consiglia di utilizzare questa impostazione per le operazioni di pulizia che devono essere eseguite anche quando il servizio non è stato avviato correttamente. I comandi configurati con questa impostazione devono essere in grado di funzionare anche se il servizio non si avviava a metà strada e lasciava i dati inizializzati in modo incompleto. Poiché i processi del servizio sono già stati terminati quando vengono eseguiti i comandi specificati con questa impostazione, non dovrebbero tentare di comunicare con essi.
Si noti che tutti i comandi configurati con questa impostazione vengono richiamati con il codice risultato del servizio, nonché con il codice e lo stato di uscita del processo principale, impostati nelle variabili di ambiente $ SERVICE_RESULT, $ EXIT_CODE e $ EXIT_STATUS, vedere systemd.exec (5) per i dettagli.