Muszę wysyłać wiadomości sieciowe, gdy usługa systemowa ulegnie awarii lub zawiesi się (tzn. Przejdzie w stan awarii; monitoruję pod kątem zawieszenia za pomocą WatchdogSec =). Zauważyłem, że nowsze systemy mają FailureAction =, ale potem zobaczyłem, że nie pozwala to na dowolne polecenia, a jedynie na ponowne uruchomienie / wyłączenie.
W szczególności potrzebuję sposobu, aby jeden komunikat sieciowy został wysłany, gdy systemd wykryje, że program się zawiesił, a drugi, gdy wykryje, że zawiesił się.
Mam nadzieję na lepszą odpowiedź niż „parsowanie dzienników” i potrzebuję czegoś, co ma niemal natychmiastowy czas odpowiedzi, więc nie sądzę, aby metoda odpytywania była dobra; powinno to być coś wyzwalanego przez zdarzenie.
Odpowiedzi:
Jednostki systemowe obsługują Awarię, która aktywuje jednostkę (lub więcej), gdy jednostka ulegnie awarii. Możesz umieścić coś takiego
A następnie utwórz
[email protected]
usługę, w której możesz użyć wymaganego specyfikatora (prawdopodobnie będziesz potrzebować co najmniej% i), aby uruchomić skrypt lub polecenie, które wyśle powiadomienie.Praktyczny przykład można zobaczyć w http://northernlightlabs.se/systemd.status.mail.on.unit.failure
źródło
notify%n.service
jest zbędny i spowoduje[email protected]
. Po drugie,%i
należy użyć zamiast%I
lub wszystkie myślniki w nazwie zostaną przekonwertowane na ukośniki.Właśnie mój sposób na powiadomienie:
/etc/systemd/system/[email protected]
dodaj do systemd:
W innych serwisach dodaj:
Załaduj ponownie konfigurację:
źródło
Natknąłem się na to narzędzie, które wydaje się to zapewniać: https://github.com/joonty/systemd_mon
źródło