StartExecPost 调用服务本身

StartExecPost 调用服务本身

我有一项定义如下的服务:

Unit]
Description=My Service
After=network.target

[Service]
ExecStart=/usr/local/bin/myservice
KillMode=process
Restart=on-failure
ExecStartPost=/usr/local/bin/script.sh

[Install]
WantedBy=multi-user.target

script.sh包含如下命令:

while ! $(systemctl is-active --quiet myservice) ; do echo "waiting.."; sleep 5; done

(以及其他对该服务的调用)

问题是它不起作用。我认为这是一个先有鸡还是先有蛋的问题。我正在等待服务启动本身。这显然行不通。

我的问题是:

怎样才能script.sh在myservice启动的时候自动运行?

谢谢

答案1

从手册

ExecStartPost= 命令仅在 ExecStart= 中指定的命令成功调用后运行,由 Type= 确定(例如,对于 Type=simple 或 Type=idle,该进程已启动,对于 Type=oneshot,最后一个 ExecStart= 进程已成功退出,对于 Type=forking,初始进程已成功退出,对于 Type=notify/Type=notify-reload 发送“READY=1”,或者对于 Type=dbus,已采用 BusName=)。

因此 ExecStartPost 仅在 之后执行ExecStart= have been invoked successfully

您的脚本无法运行可能是由于在单元文件中选择了错误的选项。

相关内容