我已经阅读了几次systemd服务联机帮助页,但是仍然无法弄清基本的systemd模式:
我想在启动时运行一次启动过程(例如docker容器或格式化驱动器),成功完成。但是,如果为此使用Type = oneshot,则无法使用Restart = on-failure,并且如果失败,则不会重试该工作。我在这里错过明显的东西吗?
我还尝试将Type = simple设置为Restart = on-failure,但是在很多情况下,我需要oneshot服务提供以下行为(从联机帮助页中):
oneshot的行为类似于简单。但是,可以预期该过程必须在systemd启动后续单元之前退出。
更新:
你看过FailureAction =吗?
—
Centimane
Restart=
通过设置FailureAction=[self.unit]
(将[self.unit]替换为设备名称),可能会实现相同的目的。这有点骇人听闻,但至少很明确而且很容易遵循。
@Centimane
—
jpkotta
FailureAction
使用与相同的值StartLimitAction
,除了none
触发某种关闭外,所有其他值都一样。
Restart
和包装my_cmd
:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
,以及一些合理的TimeoutStartSec
值。