systemd为什么在启动后立即停止服务?

时间:2016-01-05 14:59:33

标签: linux systemd

我创建了一个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脚本,它启动其他进程。

1 个答案:

答案 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=行...此服务文件调用的脚本是否经常失败?