![当另一个服务启动时自动启动一个服务](https://linux22.com/image/70212/%E5%BD%93%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%90%AF%E5%8A%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1.png)
我有一项服务依赖于另一个服务:
[Unit]
After=main.service
Requires=main.service
[Service]
ExecStart=/usr/local/bin/dependent
Restart=always
很酷的事情:
- 运行
systemctl stop main
会导致该dependent
服务也停止 - 运行
systemctl restart main
导致dependent
服务也启动
但是,运行systemctl main start
不会导致该依赖服务启动。
我该怎么做?
答案1
和After=
参数Before=
是严格地用于命令启动(也可能关闭)两个服务(如果两个服务都被要求启动)。在那里列出服务并不意味着这些服务也将启动。
如果您想控制是否启动另一个服务,则需要使用Requires=
、Wants=
、 或Conflicts=
(在 参考资料部分中[Unit]
)或WantedBy=
(在参考资料部分中[Install]
)。
就您而言,您希望在启动某个服务所依赖的服务时启动该服务(这不会自动发生,因为没有理由这样做)。您需要将以下内容添加到文件中,然后运行systemctl enable dependent
:
[Install]
WantedBy=main.service
这表示当main
启动时,也启动该服务,并且如果该服务恰好失败,则不要停止main
。