当我的 systemd 服务崩溃或挂起时(即进入失败状态;我使用 WatchdogSec= 监控挂起情况),我需要发送网络消息。我注意到较新的 systemd 有 FailureAction=,但随后发现这不允许任意命令,而只是允许重新启动/关闭。
具体来说,我需要一种方法,当 systemd 检测到程序崩溃时发送一条网络消息,当检测到程序挂起时发送另一条网络消息。
我希望得到比“解析日志”更好的答案,并且我需要具有近乎即时响应时间的东西,所以我认为轮询方法并不好;它应该是由发生的事件触发的。
答案1
systemd 单元支持 OnFailure,当单元发生故障时,它将激活一个或多个单元。您可以输入类似
OnFailure=notify-failed@%n
然后创建[email protected]
可以使用所需服务的说明符 (您可能至少需要 %i)来启动将发送通知的脚本或命令。
您可以在http://northernlightlabs.se/systemd.status.mail.on.unit.failure
答案2
只是我的通知方式:
/etc/systemd/系统/[电子邮件保护]
[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" [email protected]'
[Install]
WantedBy=multi-user.target
添加至 systemd:
systemctl enable /etc/systemd/system/[email protected]
其他服务添加:
[Unit]
OnFailure=notify-email@%i.service
重新加载配置:
systemctl daemon-reload
答案3
我碰到了这个实用程序,它似乎提供了这个功能:https://github.com/joonty/systemd_mon