【发布时间】:2017-03-28 08:32:22
【问题描述】:
我有一个服务foo.service,它依赖于服务bar.service。我需要确保bar.service 在foo.service 之前启动并且bar.service 成功启动。
来自this source 它说Requires:
该指令列出了该单元本质上依赖的所有单元。如果当前单位被激活,此处列出的单位也必须成功激活,否则该单位将失败。这些单元默认与当前单元并行启动。
还有那个After:
此指令中列出的单元将在启动当前单元之前启动。这并不意味着依赖关系,如果需要,必须通过上述指令建立依赖关系。
在同一个单元文件中同时包含Requires 和After 部分是否正确? Requires 表示服务将并行启动,但After 表示将在之前启动。如果bar.service 在After 条件下启动失败,它会在Requires 部分尝试再次启动它吗?如果是这样,我需要找到另一种方式来启动foo.service
foo.service
[Unit]
After=bar.service
Requires=bar.service
【问题讨论】:
-
同时使用
Requires(或Wants)和After应该是你要找的。这会强制执行顺序 (After) 和依赖关系 (Requires)。它不会在“Requires部分”再次启动它(还要注意服务文件不会被执行而是被解析)。 -
@Whymarrh 好的,所以我认为这意味着拥有这两个指令将改变
Requires描述中提到的“默认”启动; "默认与当前单元并行启动" -
是的,另请参阅:
Requires=