当 systemd 监控的服务进入失败状态时收到通知

当 systemd 监控的服务进入失败状态时收到通知

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

相关内容