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

Jul*_*fke 9 systemd docker coreos

我有一个backup.service每小时调用一次backup.timer。不幸的是,在容器内运行的备份脚本可以成功完成,但警告返回非零退出代码。因此,尽管一切可能都有效,但容器会以非零退出代码停止。因此机组进入故障状态。

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

明确地说:对我来说,让容器以非零退出代码停止是完全可以的。但是我的计时器不起作用。

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

我也可以在单元失败后运行sudo systemctl reset-failed,但这对我来说似乎有点麻烦......(我试过了,在那种情况下计时器再次运行了单元。但它不能作为 ExecStopPost -服务文件中的任务)

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

  • 尽管返回非零,但不会进入失败状态,或者
  • 之后重置它的状态,或者
  • 告诉计时器运行该单元,尽管它的状态是失败的

Pau*_*xon 8

您可以在命令前加上-,然后 systemd 会忽略失败并且不会将单元置于失败状态。所以,而不是

ExecStart=/path/to/your/command 
Run Code Online (Sandbox Code Playgroud)

尝试

ExecStart=-/path/to/your/command 
Run Code Online (Sandbox Code Playgroud)

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

  • 信不信由你。我有大约 15 个服务文件,在我的 `ExecPre`-Tasks 中有 `-`。我只是没有意识到这是解决方案......你让我开心。谢谢 (2认同)