systemd中ConditionPathExists=和ConditionPathExists=|有什么区别?

24

在 Systemd 中启动服务之前,我需要检查一个文件是否存在。在 [Unit] 中有两种情况:

ConditionPathExists=!/tmp/abc

ConditionPathExists=|!/tmp/abc

它们是一样的吗?有人可以帮我解释一下它们是否不同吗?

1个回答

41

有时候您会指定多个文件,例如:

ConditionPathExists=!/tmp/abc
ConditionPathExists=!/tmp/abe

如果任何一个条件不满足,服务就不会启动。这就像逻辑运算中的“与”操作。

现在如果您使用:

ConditionPathExists=|!/tmp/abc
ConditionPathExists=|!/tmp/abe

如果满足其中任何条件,它将运行服务。

条件检查可以用管道符号(|)作为前缀,这时条件就变成了触发条件。如果针对一个单元至少定义了一个触发条件,则当至少有一个触发条件适用并且所有非触发条件都适用时,该单元将被执行。

这就像OR操作一样。


非常感谢您 :) - Thao Nguyen
2
systemd的一个祝福和痛苦是,非常有用的细节可能会隐藏在大量的手册页面中。感谢@khrm的提醒。 - paultop6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接