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

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

我一直在研究一个 systemd 服务来包装一个管理脚本,并试图优雅地处理它的彻底中断。

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

我发现StartLimitIntervalStartLimitBurstStartLimitAction,它会在 Y 秒内发生 X 次故障后停止尝试重新启动,但事实证明唯一可用的操作StartLimitAction是重新启动或关闭机器,这有点小题大做。

我一直在OnFailure关注编写了一个小型服务来发送警报电子邮件当它被触发时,但是 OnFailure 每次服务终止时都会触发,而不是在达到启动限制时触发,所以我们会收到一堆电子邮件,而不仅仅是一封。

有什么想法下一步该尝试什么吗?

答案1

来自systemd.unit 手册页

失败时=

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

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

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

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

答案2

Startlimitaction可能就是你想要的。手册页说

... 可采用 none、reboot、reboot-force、reboot-immediate、poweroff、poweroff-force 或 poweroff-immediate 之一。如果没有设置,达到速率限制将不会触发任何操作,除了不允许启动

看来,将 startlimit 操作设置为 none 可能会实现您想要的效果。

相关内容