如何设置两个冲突的 systemd 单元并使其优先于另一个?

如何设置两个冲突的 systemd 单元并使其优先于另一个?

我有 2 个 systemd 单元需要配置。它们都需要在特定位置设置配置文件(每个都有自己的配置位置),因此它们都配置了ConditionPathExists各自的配置文件。

它们由于监听同一端口而相互冲突。所以他们也配置了Conflicts=

但是,在两个配置文件都存在的情况下(在正常情况下不应发生,但可能会发生),我希望启动服务 A 而不是服务 B。为此我应该配置什么?

答案1

如果两个单元都已排队并且其他一切都相同(即两个单元都通过相等的 Wants= 依赖项被拉入),则单位有Conflicts=将是开始的单元,而“与其他内容冲突”单元将被跳过。

答案2

我不知道 Systemd 中有任何优先级配置,但您可以使用 Systemd 功能来实现目标。

# a.service
ConditionPathExists=/path/to/configfile.a
# b.service
ConditionPathExists=!/path/to/configfile.a
ConditionPathExists=/path/to/configfile.b

相关内容