我创建了一个systemd服务,它应该在启动或重启时调用shell脚本。
[Unit]
Description=Starts the DCCA index software
[Install]
WantedBy=multi-user.target
[Service]
ExecStart=/opt/insiteone/bin/indexControl start
ExecStop=/opt/insiteone/bin/indexControl stop
# Execute pre and post scripts as root
#PermissionsStartOnly=true
Restart=on-abort
TimeoutSec=600
最初它在启动时一直在无限循环中继续重启,但是当我添加TimeoutSec
选项时,它在第一次启动服务时立即调用ExecStop
(开始,然后立即再次停止。)
任何线索,我哪里错了? P.S:indexControl是一个shell脚本,它启动其他进程。
答案 0 :(得分:5)
尝试将Restart=on-abort
更改为Restart=on-abnormal
来自http://www.freedesktop.org/software/systemd/man/systemd.service.html:
将此设置为on-failure是长时间运行的推荐选择 服务,以通过尝试自动增加可靠性 从错误中恢复。对于能够终止的服务 他们自己选择(并避免立即重启),on-abnormal是 另一种选择。
另外,您可能希望将Type=oneshot
添加到[Service]
部分。
来自https://wiki.archlinux.org/index.php/Systemd#Service_types:
Type = oneshot:这对于执行单个作业的脚本非常有用 出口。您可能还想将RemainAfterExit = yes设置为systemd 在流程退出后仍然认为该服务处于活动状态。
您可以在下面粘贴我推荐的更改:
[Unit]
Description=Starts the DCCA index software
[Install]
WantedBy=multi-user.target
[Service]
Type=oneshot
ExecStart=/opt/insiteone/bin/indexControl start
ExecStop=/opt/insiteone/bin/indexControl stop
Restart=on-abnormal
还需要考虑的是您是否需要Restart=
行...此服务文件调用的脚本是否经常失败?