我有一个备份服务每小时调用一次备份定时器。不幸的是,容器内运行的备份脚本可以完成成功但有警告返回非零退出代码。因此,尽管一切可能都已成功,但容器仍会以非零退出代码停止。因此,单元进入失败的舰队状态。
在这种情况下,计时器似乎不会再次启动该单元,尽管我在 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 文件的部分中将它们指定为以空格分隔的列表,以SuccessExitStatus
、RestartPreventExitStatus
和表示RestartForceExitStatus
。它们也采用信号名称。