我有backup.timer每小时调用backup.service 。 不幸的是,在容器内运行的备份脚本可以成功完成, 但警告返回一个非零的退出代码。 所以,尽pipe一切都可能已经奏效了,容器会以非零的退出码停止。 所以舰队进入失败状态。
在这种情况下,计时器似乎不会再启动这个单元,尽pipe我没有在systemd文档中find任何说明。
要说清楚:对于我来说,让容器以非零的退出码停止是完全正确的。 但是,我的计时器不起作用。
我现在可以把这个脚本封装成另一个叫做als docker入口点的脚本。 但是,我将不得不确保输出的STDOUT和STDERR保持不变。
我也可以在单元失败后运行sudo systemctl reset-failed ,但是这对我来说似乎有点不好意思…(我试过了,在这种情况下,定时器再次运行了这个单元,但是它不起作用ExecStopPost在服务文件中任务)
有没有更好的方法来确保一个单位
你可以在你的命令前加上-
,然后systemd忽略失败,不会使单元进入失败状态。 所以,而不是
ExecStart=/path/to/your/command
尝试
ExecStart=-/path/to/your/command
有关更多信息,请参阅systemd手册页。
如果您想要忽略某些返回值,但仍希望其他某些人将systemd计为错误,则可以在.service文件的[Service]
部分中将它们指定为SuccessExitStatus
, RestartPreventExitStatus
和RestartForceExitStatus
的空格分隔列表。 这些也采取信号名称。
参考: man 5 systemd.service