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 文件而不修改它。这是模式:
- 创建
/etc/systemd/system/A.d/stop-b.conf
。
- 添加这个:
[Service]
ExecStopPost=systemctl stop B.service
如果您想在 A 停止时停止 B,那就是这样。您在使用中看到的第二个功能是 ExecStopPost=
指令,当服务停止时导致 运行 一个额外的命令。
我正在创建一个 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 文件而不修改它。这是模式:
- 创建
/etc/systemd/system/A.d/stop-b.conf
。 - 添加这个:
[Service]
ExecStopPost=systemctl stop B.service
如果您想在 A 停止时停止 B,那就是这样。您在使用中看到的第二个功能是 ExecStopPost=
指令,当服务停止时导致 运行 一个额外的命令。