我正在创build一个systemd .service文件,我需要帮助理解Requires=和After=之间的区别。 手册页说Requires= “configuration需求依赖关系到其他单位”。 和After= “configuration单元之间的顺序依赖关系”。 有什么不同?
After=configuration服务订单(仅在Y后执行X),而Requires=状态依赖关系。 如果您没有指定订单,则取决于另一个的服务将与其所依赖的服务同时启动。 另外,我理解它的方式(尽pipe现在我不能testing,也没有find引用), After=是一个“松散耦合”,如果一个服务有这样的语句, After=行根本没有启动,而Require=将阻止它开始如果不满足要求。
引用https://www.freedesktop.org/software/systemd/man/systemd.unit.html :
需要=
configuration其他单元的需求依赖关系。 如果这个单位被激活,这里列出的单位也会被激活。 如果其他单元之一被取消激活或其激活失败,则该单元将被禁用。 该选项可以多次指定,也可以在一个选项中指定多个空格分隔的单位,在这种情况下,将创build所有列出名称的需求依赖关系。 请注意,需求相关性不会影响服务启动或停止的顺序。 这必须使用After =或Before =选项独立configuration。 如果一个单元foo.service需要一个configuration为Requires =的单元bar.service,并且没有configuration使用After =或者Before =的顺序,那么如果foo.service被激活,那么这两个单元将同时启动并且没有任何延迟。 通常,为了在处理失败的服务时实现更健壮的系统,使用“要求=”而不是“要求=”是更好的select。
和
之前=,之后=
单元名称的空格分隔列表。 configuration单元之间的顺序依赖关系。 如果一个单元foo.service包含一个设置Before = bar.service并且两个单元都正在启动,bar.service的启动会延迟到foo.service启动。 请注意,此设置与Requires =所configuration的需求依赖关系无关并且正交。 在After =和Requires =选项中包含单位名称是一种常见的模式,在这种情况下,列出的单位将在configuration了这些选项的单位之前启动。 这个选项可以被多次指定,在这种情况下,所有列出的名字的顺序依赖关系被创build。 在= =之后,即=在确保所configuration的单元在列出的单元完成启动之后启动之后,在=之前确保相反,即在所列出的单元启动之前所configuration的单元完全启动。 请注意,如果两台设备之间的顺序依赖关系closures,则会应用启动顺序的反转。 也就是说,如果一个单元在另一个单元上configuration了After =,则前者如果两者都closures,则在后者之前停止。 给定两个单元之间有任何顺序依赖关系,如果一个单元closures,另一个单元启动,则在启动之前closures。 如果sorting依赖项是After =或Before =,则无关紧要。 只要一个closures,另一个closures,两个中的哪一个closures也无关紧要。 在所有情况下都要在启动之前closures停机。 如果两个单元之间没有顺序依赖关系,它们将被closures或同时启动,并且不会发生sorting。