只有在存在服务A时,Systemd服务B才会在服务A之后启动。

10

我有两个systemd服务,A和B。我希望B在A之后执行,但仅当A存在时才执行B。

2个回答

5
您需要在B.service文件中添加以下内容:

After=A.service

您可以将其添加到 A 服务中:
Before=B.service

来自SystemD文档:

Before=, After=

这两个设置期望一个由空格分隔的单元名称列表。它们配置单元之间的排序依赖关系。如果一个单元foo.service包含一个设置Before=bar.service,并且两个单元都在启动,那么bar.service的启动将被延迟,直到foo.service完成启动。请注意,此设置独立于并正交于由Requires=、Wants=或BindsTo=配置的要求依赖关系。

文档来源:https://www.freedesktop.org/software/systemd/man/systemd.unit.html


5

ServiceB需要在ServiceB.service文件的Unit部分包含Wants=指令来引用ServiceA。示例代码如下:

[Unit]
Description=ServiceB description
Wants=ServiceA.service

来自 https://www.freedesktop.org/software/systemd/man/systemd.unit.html

Wants= 是 Requires= 的一种弱化版本。列在此选项中的单元将会在配置单元启动时被启动。然而,如果列出的单元启动失败或无法添加到事务中,则对整个事务的有效性没有影响。这是将一个单元的启动挂钩到另一个单元的启动的推荐方式。

请注意,此类依赖项也可以通过在伴随单元文件的 .wants/ 目录中添加符号链接来进行配置。有关详细信息,请参见上文。


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