J'ai besoin d'envoyer des messages réseau lorsqu'un service systemd se bloque ou est bloqué (c'est-à-dire qu'il entre en état d'échec; je surveille le blocage en utilisant WatchdogSec =). J'ai remarqué que les nouveaux systemd ont FailureAction =, mais j'ai vu que cela ne permettait pas les commandes arbitraires, mais simplement le redémarrage/l'arrêt.
Plus précisément, j'ai besoin d'un moyen pour envoyer un message réseau lorsque systemd détecte que le programme est tombé en panne, et un autre lorsqu'il détecte qu'il s'est bloqué.
J'espère une meilleure réponse que "analyser les journaux", et j'ai besoin de quelque chose qui a un temps de réponse presque instantané, donc je ne pense pas qu'une approche d'interrogation soit bonne; ce devrait être quelque chose déclenché par l'événement qui se produit.
les unités systemd prennent en charge OnFailure qui active une unité (ou plus) lorsque l'unité tombe en panne. Vous pouvez mettre quelque chose comme
OnFailure=notify-failed@%n
Et puis créez le [email protected]
service où vous pouvez utiliser le --- spécificateur (vous voudrez probablement au moins% i) lancer le script ou la commande qui enverra la notification.
Vous pouvez voir un exemple pratique dans http://n Northernlightlabs.se/systemd.status.mail.on.unit.failure
Juste ma façon d'avertir:
/etc/systemd/system/[email protected]
[Unit]
Description=Sent email
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/systemctl status %i | /usr/bin/mailx -Ssendwait -s "[SYSTEMD_%i] Fail" [email protected]'
ajouter à systemd:
systemctl enable /etc/systemd/system/notify-email@service
À d'autres services, ajoutez:
[Unit]
OnFailure=notify-email@%i.service
Rechargez la configuration:
systemctl daemon-reload
Je suis tombé sur cet utilitaire qui semble fournir ceci: https://github.com/joonty/systemd_mon