systemd 服务的停止如何触发不同服务的停止?

How the stoppage of a systemd service can trigger the stoppage of different one?

我正在创建一个 systemd 服务,让我们在 Ubuntu 16.04 上将其称为 B,我希望在每次启动时在名为 A 的特定服务之后启动,然后是 运行 特定脚本。到目前为止,我已经创建了包含以下字段的服务单元文件:

[Unit]
Description=B
After=A.service

[Service]
ExecStart=/opt/B.sh

[Install]
WantedBy=multi-user.target

另外我想停止服务A来触发服务B的停止,在A服务单元文件中使用以下命令是否有效

ExecStop=systemctl stop A.service

或者还有其他方法吗?如果可能,我不想更改现有的 A 服务文件单元。

您可以结合使用两个 systemd 功能来解决您的问题。

首先,您可以使用 drop-in 文件扩展现有的 systemd conf 文件而不修改它。这是模式:

  1. 创建/etc/systemd/system/A.d/stop-b.conf
  2. 添加这个:

[Service] ExecStopPost=systemctl stop B.service

如果您想在 A 停止时停止 B,那就是这样。您在使用中看到的第二个功能是 ExecStopPost= 指令,当服务停止时导致 运行 一个额外的命令。