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

我有backup.timer每小时调用backup.service 。 不幸的是,在容器内运行的备份脚本可以成功完成, 但警告返回一个非零的退出代码。 所以,尽pipe一切都可能已经奏效了,容器会以非零的退出码停止。 所以舰队进入失败状态。

在这种情况下,计时器似乎不会再启动这个单元,尽pipe我没有在systemd文档中find任何说明。

要说清楚:对于我来说,让容器以非零的退出码停止是完全正确的。 但是,我的计时器不起作用。

我现在可以把这个脚本封装成另一个叫做als docker入口点的脚本。 但是,我将不得不确保输出的STDOUT和STDERR保持不变。

我也可以在单元失败后运行sudo systemctl reset-failed ,但是这对我来说似乎有点不好意思…(我试过了,在这种情况下,定时器再次运行了这个单元,但是它不起作用ExecStopPost在服务文件中任务)

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

  • 不会进入失败状态,虽然它返回非零或
  • 重置它的状态之后,或
  • 告诉定时器运行该单位,尽pipe其状态失败

你可以在你的命令前加上- ,然后systemd忽略失败,不会使单元进入失败状态。 所以,而不是

 ExecStart=/path/to/your/command 

尝试

 ExecStart=-/path/to/your/command 

有关更多信息,请参阅systemd手册页。

如果您想要忽略某些返回值,但仍希望其他某些将systemd计为错误,则可以在.service文件的[Service]部分中将它们指定为SuccessExitStatusRestartPreventExitStatusRestartForceExitStatus的空格分隔列表。 这些也采取信号名称。

参考: man 5 systemd.service