我有两个systemd服务,A和B。我希望B在A之后执行,但仅当A存在时才执行B。
After=A.service
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
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/ 目录中添加符号链接来进行配置。有关详细信息,请参见上文。