Réponses:
Il y a une OnFailure=
directive dans la section [Unit]
, documentée dans systemd.unit (5) . Il est défini comme suit:
Une liste séparée par des espaces d'une ou plusieurs unités qui sont activées lorsque cette unité entre dans l'état "échoué".
(Il y a également une OnFailureJobMode=
directive dans la même section qui permet de définir le mode de travail pour activer OnFailure = unités.)
/etc/systemd/system
et placez son nom dans la OnFailure=
directive.
Vous pouvez également utiliser ExecStopPost
pour exécuter une commande directement au lieu de démarrer une unité.
Je n'étais pas satisfait du OnFailure
cadre alors j'ai continué à chercher et à trouver ExecStopPost
.
L'exemple réel suivant, si la tâche principale échoue, alors systemd exécutera une git
commande.
[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 = Commandes supplémentaires qui sont exécutées après l'arrêt du service. Cela inclut les cas où les commandes configurées dans ExecStop = ont été utilisées, où le service n'a aucun ExecStop = défini ou où le service s'est arrêté de manière inattendue. Cet argument prend plusieurs lignes de commande, suivant le même schéma que celui décrit pour ExecStart =. L'utilisation de ces paramètres est facultative. La substitution de spécificateurs et de variables d'environnement est prise en charge. Notez que, contrairement à ExecStop =, les commandes spécifiées avec ce paramètre sont appelées lorsqu'un service ne démarre pas correctement et est à nouveau arrêté.
Il est recommandé d'utiliser ce paramètre pour les opérations de nettoyage qui doivent être exécutées même lorsque le service n'a pas démarré correctement. Les commandes configurées avec ce paramètre doivent pouvoir fonctionner même si le service ne démarre pas à mi-chemin et laisse des données incomplètement initialisées. Comme les processus du service sont déjà terminés lorsque les commandes spécifiées avec ce paramètre sont exécutées, ils ne doivent pas tenter de communiquer avec eux.
Notez que toutes les commandes configurées avec ce paramètre sont appelées avec le code de résultat du service, ainsi que le code de sortie et l'état du processus principal, définis dans les variables d'environnement $ SERVICE_RESULT, $ EXIT_CODE et $ EXIT_STATUS, voir systemd.exec (5) pour plus de détails.