Linux

當 systemd 監控的服務進入失敗狀態時獲取通知

  • July 19, 2021

當我的 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

引用自:https://serverfault.com/questions/694818