Systemd 在达到启动限制后执行命令

Wil*_*ill 7 systemd

我一直在开发一个 systemd 服务来包装管理脚本,我正在尝试优雅地处理它完全中断。

现在我已经Restart设置为always所以当出现故障时它会再次尝试,但一些故障状态需要注意(缺少配置文件、错误的 SQL 等),所以我不希望它在不可纠正的状态下在后台持续旋转。

我发现StartLimitInterval, StartLimitBurst, 和StartLimitAction在 Y 秒内 X 次失败后停止尝试重新启动它,但事实证明,唯一可用的操作StartLimitAction是重新启动或关闭机器,这有点矫枉过正。

我一直在研究OnFailure编写了一个迷你服务,在它被触发时发送警报电子邮件,但 OnFailure 每次服务终止时都会触发,而不是在达到开始限制时触发,所以我们收到了一堆电子邮件而不是一个。

下一步尝试什么的任何想法?

小智 3

systemd.unit 手册页

失败时=

当该单元进入“失败”状态时激活的一个或多个单元的以空格分隔的列表。仅在达到启动限制后,使用 Restart= 的服务单元才会进入故障状态。

然而,第二句话似乎是一个新的限制,因为它出现在我的 Arch 安装上的 systemd 版本 241 的手册中,但不在我的 CentOS 7 安装的版本 219 中。

您可以使用以下命令检查您的 systemd 版本systemctl --version

我知道这是一个老问题,但只是想与有同样问题的其他人分享。