Requires=
对我来说,对于在某种程度上依赖于其他服务的服务来说,在其脚本(使用和After=
指令)中指定这一点听起来更自然。毕竟,在编写服务时,您实际上无法了解可能依赖于它的所有服务,但您可以知道您的服务依赖于什么。
那么问题是:该Before=
指令的实际目的是什么?什么时候应该使用它?
答案1
Before
并After
指定服务之间的排序约束,但不指定服务之间的依赖关系约束。因此,无需详尽记录依赖于该服务Before
声明中任何给定服务的服务;正如您正确指出的那样,这是不可能的。
Before
当使用你知道您的服务必须在另一个已知的单元之前启动,即使其他单元不一定依赖于指定的服务。重要的方面是捕获知识的意义所在。特别是,它经常用在服务描述中来声明服务必须在给定的时间之前启动。目标,这几乎是描述服务和目标之间的排序约束的唯一明智的方式;例如,wpa_supplicant@
必须在目标之前启动network
。其他合适的情况包括以某种方式“增强”其他服务的服务,其中不能期望增强的服务了解增强的服务;例如,fwupd
说它必须在服务之前启动gdm
,这是可以的,但您不会期望gdm
知道它应该在服务之后启动fwupd
(或更糟糕的是,取决于它)。