Dis*_*ame 47 linux bash service systemd
我需要在系统服务崩溃或挂起时发送网络消息(即进入失败状态;我使用 WatchdogSec= 监视挂起)。我注意到较新的 systemd 有 FailureAction=,但后来发现这不允许任意命令,而只是重新启动/关闭。
具体来说,我需要一种方法来在 systemd 检测到程序崩溃时发送一条网络消息,并在检测到程序挂起时发送另一条网络消息。
我希望有一个比“解析日志”更好的答案,而且我需要一些具有近乎即时响应时间的东西,所以我认为轮询方法不是很好;它应该是由事件发生触发的东西。
小智 43
systemd 单元支持 OnFailure,它会在单元发生故障时激活一个(或多个)单元。你可以把类似的东西
OnFailure=notify-failed@%n
Run Code Online (Sandbox Code Playgroud)
然后创建notify-failed@.service服务,您可以在其中使用所需的说明符 (您可能至少需要 %i)来启动将发送通知的脚本或命令。
您可以在http://northernlightlabs.se/systemd.status.mail.on.unit.failure 中看到一个实际示例
小智 27
只是我的通知方式:
/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
Run Code Online (Sandbox Code Playgroud)
添加到systemd:
systemctl enable /etc/systemd/system/notify-email@.service
Run Code Online (Sandbox Code Playgroud)
在其他服务中添加:
[Unit]
OnFailure=notify-email@%i.service
Run Code Online (Sandbox Code Playgroud)
重新加载配置:
systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)