Frage Benachrichtigung erhalten, wenn der Systemd-überwachte Dienst einen Fehlerstatus eingibt


Ich muss Netzwerk-Nachrichten gesendet haben, wenn ein Systemd-Dienst habe ich stürzt oder hängt (d. H., Tritt in einen fehlerhaften Zustand; Ich überwache Hang mit WatchdogSec =). Ich habe bemerkt, dass neuere Systemd FailureAction =, aber dann sah, dass dies keine willkürlichen Befehle erlaubt, sondern nur Neustart / Herunterfahren.

Genauer gesagt brauche ich eine Möglichkeit, eine Netzwerknachricht zu senden, wenn systemd feststellt, dass das Programm abgestürzt ist, und eine andere, wenn es feststellt, dass es abgestürzt ist.

Ich hoffe auf eine bessere Antwort als "parse die Logs", und ich brauche etwas, das eine fast sofortige Reaktionszeit hat, also glaube ich nicht, dass ein Polling-Ansatz gut ist; Es sollte etwas ausgelöst durch das Ereignis auftreten.


25
2018-05-27 19:03


Ursprung


Können Sie bitte ein Beispiel (auch ein nicht funktionierendes) angeben, was Sie erreichen möchten? - dawud
Können Sie Ihre Frage bearbeiten, um diese Informationen hinzuzufügen, anstatt sie in einem Kommentar hinzuzufügen? :) - dawud


Antworten:


System-Einheiten unterstützen OnFailure, die eine Einheit (oder mehr) aktivieren, wenn die Einheit zu fehlgeschlagen geht. Sie können etwas wie

 OnFailure=notify-failed@%n

Und dann erstelle die notify-failed@.service Service, wo Sie die erforderlichen verwenden können Spezifizierer  (Wahrscheinlich wollen Sie mindestens% i), um das Skript oder den Befehl zu starten, der die Benachrichtigung sendet.

Sie können ein praktisches Beispiel sehen in http://northernlightlabs.se/systemd.status.mail.on.unit.failure


28
2018-06-23 20:10



Für die Anweisungen auf der verlinkten Seite sind einige Korrekturen erforderlich. Zuerst, notify%n.service ist überflüssig und führt zu notify@my-service.service.service. Zweite, %i sollte statt verwendet werden %Ioder alle Bindestriche im Namen werden in Schrägstriche umgewandelt. - orodbhen
Gibt es eine Möglichkeit, dies für mehrere oder alle Einheiten zu tun, ohne ihre Einheitendateien zu ändern? - Vladimir Panteleev


Nur meine Art zu benachrichtigen:

/etc/systemd/system/notify-email@.service

[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" your_admin@company.blablabla'

zu systemd hinzufügen:

systemctl enable /etc/systemd/system/notify-email@service

Bei anderen Diensten hinzufügen:

[Unit]
OnFailure=notify-email@%i.service

Reload de Konfigurationen:

systemctl daemon-reload

2
2017-08-01 12:40





Ich stieß auf dieses Dienstprogramm, das dies zu bieten scheint: https://github.com/joonty/systemd_mon


0
2017-11-23 19:25