riceve una notifica quando il servizio monitorato da systemd entra nello stato non riuscito


32

È necessario che vengano inviati messaggi di rete quando un servizio systemd presenta arresti anomali o si blocca (ovvero, entra in stato di errore; monitoro il blocco tramite WatchdogSec =). Ho notato che il nuovo sistema ha FailureAction =, ma poi ho visto che questo non consente comandi arbitrari, ma solo il riavvio / arresto.

In particolare, ho bisogno di un modo per avere un messaggio di rete inviato quando systemd rileva il crash del programma e un altro quando rileva che si è bloccato.

Spero in una risposta migliore di "analizzare i log" e ho bisogno di qualcosa che abbia un tempo di risposta quasi istantaneo, quindi non credo che un approccio di polling sia buono; dovrebbe essere qualcosa innescato dall'evento che si verifica.


Potete per favore fornire un esempio (anche non funzionante) di ciò che state cercando di ottenere?
— Dawud,

Puoi modificare la tua domanda per aggiungere queste informazioni invece di aggiungerle in un commento? :)
— dawud,

Risposte:


31

le unità di sistema supportano OnFailure che attiverà un'unità (o più) quando l'unità va in errore. Puoi mettere qualcosa del genere

 OnFailure=notify-failed@%n

E quindi creare il notify-failed@.serviceservizio in cui è possibile utilizzare l' identificatore richiesto (probabilmente si vorrà almeno% i) per avviare lo script o il comando che invierà la notifica.

Puoi vedere un esempio pratico in http://northernlightlabs.se/systemd.status.mail.on.unit.failure


5
Ci sono un paio di correzioni necessarie per le istruzioni sul sito collegato. Innanzitutto, notify%n.serviceè ridondante e si tradurrà in notify@my-service.service.service. In secondo luogo, %idovrebbe essere usato al posto di %I, o tutti i trattini nel nome verranno convertiti in barre.
— orodbhen,

4
C'è un modo per farlo per più o tutte le unità, senza modificare i file delle loro unità?
— Vladimir Panteleev,

16

Solo il mio modo di avvisare:

/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'

aggiungi a systemd:

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

Ad altri servizi aggiungere:

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

Ricarica la configurazione:

systemctl daemon-reload

C'è un modo per evitare di innescarlo molte volte di seguito? In alcune situazioni la ricezione di e-mail 1K su un servizio che non ha funzionato durante la notte e ha riprovato più volte a riavviarsi non è utile.
— Starbeamrainbowlabs

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.