我正在尝试创建一个在 ServiceA 启动后启动的 ServiceB。
这就是我尝试做的:
服务A文件:
[Unit]
Description=ServiceA
After=network.target
[Service]
ExecStartPre=running some shell script....
ExecStart=running some shell script....
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target
第一个 ServiceB 文件尝试:
[Unit]
Description=ServiceB
After=ServiceA.service
Requires=ServiceA.service
[Service]
ExecStart=running some shell script....
[Install]
WantedBy=multi-user.target
第二个 ServiceB 文件尝试:
[Unit]
Description=ServiceB
After=ServiceA.service
Requires=ServiceA.service
[Service]
ExecStart=running some shell script....
[Install]
WantedBy=ServiceA.service
第一次尝试有效,但仅限于启动时,但是当我使用 systemctl stop ServiceA systemctl stop ServiceA 停止服务时
然后尝试再次启动 ServiceA systemctl start ServiceA
我认为 ServiceB 也应该启动(它仍然启用)
可能存在什么问题?
** 我不想在 ServiceA 文件中使用 Wants=,我希望 ServiceB 来管理它。
答案1
您忘记告诉在编辑后systemd
重新安装新代码。文件没有任何问题,一旦服务正确安装,systemctl start 和 stop 就可以正常工作。使用以下命令告诉 systemd 使用新代码:.wants
ServiceB.service
.service
sudo systemctl daemon-reload # Or use `systemctl edit` next time, which does this automatically
sudo systemctl disable ServiceB.service # Applies the remove from multi-user.target.wants
sudo systemctl enable ServiceB.service # Actually installs to ServiceA.wants
systemd 不会在启动时自动重新启用服务,而是让您单独执行此操作,这是有原因的。您希望能够禁用服务,这可以通过从 中删除来完成.wants
。如果它自动重新创建依赖项,您将无法禁用导致问题的服务。