使用 fleet / systemd 重置 / 忽略非零退出代码

使用 fleet / systemd 重置 / 忽略非零退出代码

我有一个备份服务每小时调用一次备份定时器。不幸的是,容器内运行的备份脚本可以完成成功但有警告返回非零退出代码。因此,尽管一切可能都已成功,但容器仍会以非零退出代码停止。因此,单元进入失败的舰队状态。

在这种情况下,计时器似乎不会再次启动该单元,尽管我在 systemd 文档中没有找到任何关于这一点的内容。

说清楚一点:对我来说,让容器以非零退出代码停止是完全没问题的。但我的计时器却不起作用。

我现在可以将该脚本封装到另一个脚本中,然后将其称为 als docker entrypoint。但我必须确保以某种方式保留 STDOUT 和 STDERR 的输出。

我也可以跑sudo systemctl 重置失败在单元发生故障后,但这对我来说似乎有点奇怪......(我尝试过,在这种情况下,计时器再次运行该单元。但它不能作为服务文件中的 ExecStopPost-Task 工作)

有没有更好的方法来确保一个单位

  • 虽然返回非零值,但并未进入失败状态,或者
  • 随后重置其状态,或者
  • 告诉计时器运行该单元,尽管它的状态是失败的

答案1

您可以在命令前加上-,这样 systemd 就会忽略故障,不会让单元进入故障状态。因此,

ExecStart=/path/to/your/command 

尝试

ExecStart=-/path/to/your/command 

systemd手册页了解更多信息。

答案2

如果你想忽略一些返回值,但仍然想要一些其他的要将错误计入 systemd,您可以在[Service].service 文件的部分中将它们指定为以空格分隔的列表,以SuccessExitStatusRestartPreventExitStatus和表示RestartForceExitStatus。它们也采用信号名称。

参考:man 5 systemd.service

相关内容