我有Jenkins在CentOS7上运行,它不时有崩溃,我想在这种情况发生时自动重启。 谷歌一点点我发现,在Systemd上,你可以使用Restart = on-failure,但问题是从我看到的Jenkins不使用服务文件。
如果我做systemctl状态jenkins.service我得到:
● jenkins.service - LSB: Jenkins Continuous Integration Server Loaded: loaded (/etc/rc.d/init.d/jenkins) Active: active (running) since Mon 2016-02-29 17:30:08 UTC; 11min ago
所以看起来它仍然使用init.d? 任何想法如何在这种情况下,我可以使用此Restart=on-failure
?
作为一个非常可怕的工具,你可以在jenkins初始化脚本中指向systemd
,因为脚本有一大堆令人讨厌的“Java的哪里”和其他代码来弄清楚如何让jenkins启动并运行。
# cat /etc/systemd/system/jenkins.service [Unit] Description=Jenkins Server Daemon Wants=network-online.target After=network-online.target [Service] ExecStart=/etc/init.d/jenkins start Restart=always RestartSec=3 Type=forking [Install] WantedBy=multi-user.target # systemctl enable jenkins.service
然后这个服务在重新启动的时候开始,没有被chkconfig --list
列出,并且即使你kill -9 $thepid
尽pipe理想的情况是长期来说,更好的select是让jenkins的人在他们的RPM中直接支持systemd …
我可以提供systemd文件,这是来自Jenkins Wiki的代码的修改:
[Unit] Description=Jenkins Daemon [Service] SuccessExitStatus=143 ExecStart=/usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8081 --ajp13Port=-1 Environment="JENKINS_HOME=/data/jenkins" User=jenkins [Install] WantedBy=multi-user.target
这比在Ubuntu 16.04上通过apt安装Jenkins的@thrig好得多。 这样你就不再需要/etc/init.d/jenkins和/ etc / default / jenkins,并且直接在journalctl中获取日志。
Jenkins软件包仍然只运行一个SysV初始化文件,所以系统特定的行为不可用。 我提出了一个错误报告,要求在软件包中发送systemd单元文件。 https://issues.jenkins-ci.org/browse/JENKINS-41218