Linux
當 systemd 監控的服務進入失敗狀態時獲取通知
當我的 systemd 服務崩潰或掛起(即進入失敗狀態;我使用 WatchdogSec= 監視掛起)時,我需要發送網路消息。我注意到較新的 systemd 有 FailureAction=,但後來看到這不允許任意命令,而只是重新啟動/關閉。
具體來說,我需要一種方法來在 systemd 檢測到程序崩潰時發送一個網路消息,而在它檢測到程序已掛起時發送另一個網路消息。
我希望得到比“解析日誌”更好的答案,而且我需要具有近乎即時響應時間的東西,所以我認為輪詢方法不好;它應該是由發生的事件觸發的。
systemd 單元支持 OnFailure,它將在單元發生故障時啟動一個(或更多)單元。你可以把類似的東西
OnFailure=notify-failed@%n
然後創建
notify-failed@.service
服務,您可以在其中使用所需的說明符 (您可能至少需要 %i)來啟動將發送通知的腳本或命令。您可以在http://northernlightlabs.se/systemd.status.mail.on.unit.failure中看到一個實際範例
只是我的通知方式:
/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' [Install] WantedBy=multi-user.target
添加到systemd:
systemctl enable /etc/systemd/system/notify-email@.service
在其他服務中添加:
[Unit] OnFailure=notify-email@%i.service
重新載入配置:
systemctl daemon-reload