是否需要在“Wants=”和“After=”行上都指定一个systemd单元,或者“After=”就足够了?

是否需要在“Wants=”和“After=”行上都指定一个systemd单元,或者“After=”就足够了?

假设我有一个 systemd 服务类型的单元,其中包含以下内容Wants=After=语句:

Wants=foo.service
After=foo.service

如果 on 已经打开,我真的需要指定它foo.service吗?或者也许需要 ,因为如果没有单位指定as或,那么根本就不会启动?Wants=After=Wants=foo.servicefoo.serviceWants=Requires=foo.service

答案1

Wants=这取决于,两者都是可能的,它们都做了一些事情,但它们有不同的效果,所以如果您想确保foo.service在另一个单元启动时该单元也启动,则您需要保留。

如果您只有顺序依赖性,例如After=foo.service,那么这仅意味着如果两个单元都正在启动(在同一事务中),则 systemd 将foo.service首先启动(并等到它完全启动),然后再启动当前单元。

当您不一定知道是否foo.service启用时,这很有用,您的服务可以以任何方式工作,但是如果 foo.service已启用,您希望在服务之前启动它。

或者也许Wants=foo.service需要 ,因为如果没有单位指定foo.serviceasWants=Requires=,那么根本foo.service就不会启动?

对,那是正确的。和指令是仅排序指令,因此它们不会拉动其他单元,仅在该单元已经通过其他方式启动时影响排序(通常它是直接启用本身,或者可能通过或依赖于第三个单元After=)单元。)Before=Wants=Requires=

相关内容