仅当服务 A 存在时,Systemd 服务 B 才在另一个服务 A 之后启动

Nay*_*dhu 5 linux service systemd

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

小智 5

您需要在 B.service 文件中添加:

After=A.service
Run Code Online (Sandbox Code Playgroud)

或者你可以添加到A.service:

Before=B.service
Run Code Online (Sandbox Code Playgroud)

来自 SystemD 文档:

之前=,之后=

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

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


iam*_*ser 5

SerivceB需要包含Wants=的指令ServiceAUnit文件的部分ServiceB.service看起来像这样:

[Unit]
Description=ServiceB description
Wants=ServiceA.service
Run Code Online (Sandbox Code Playgroud)

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

Wants= Requires= 的较弱版本。如果配置单元已启动,则将启动此选项中列出的单元。但是,如果列出的单位未能启动或无法添加到交易中,这不会影响整个交易的有效性。这是将一个单元的启动与另一个单元的启动挂钩的推荐方法。

请注意,这种类型的依赖项也可以通过将符号链接添加到单元文件附带的 .wants/ 目录来在单元配置文件之外进行配置。详细信息请参见上文。