我创建了一个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
在第一次启动服务时立即调用(启动,然后立即再次停止).
任何线索,我哪里错了?PS:indexControl是一个shell脚本,它启动其他进程.
尝试Restart=on-abort
改为Restart=on-abnormal
来自http://www.freedesktop.org/software/systemd/man/systemd.service.html:
将此设置为on-failure是长时间运行服务的推荐选择,以便通过尝试从错误中自动恢复来提高可靠性.对于能够根据自己的选择终止(并避免立即重启)的服务,异常是另一种选择.
此外,您可能想要添加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=
条线......这个服务文件调用的脚本经常失败吗?