web-dev-qa-db-fra.com

obtenir une notification lorsque le service surveillé par systemd entre en état d'échec

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.

36
Display Name

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

35
Pablo Martinez

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
20
ceinmart

Je suis tombé sur cet utilitaire qui semble fournir ceci: https://github.com/joonty/systemd_mon

0
Michael Warkentin