我有一项定义如下的服务:
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
。
您的脚本无法运行可能是由于在单元文件中选择了错误的选项。