当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《systemd为什么在启动后立即停止服务?》经验,为你挑选了1个好方法。

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



1> 小智..:

尝试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=条线......这个服务文件调用的脚本经常失败吗?


谢谢你的答案,但`type = oneshot`不起作用,但`type = forking`确实如此.我从这里得到了答案,这是有效的.http://superuser.com/questions/1022142/why-is-systemd-stopping-service-immediately-after-it-is-started/
使用RemainAfterExit = yes和Type = oneshot可能有效
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有