我在 CentOS7 上运行 Jenkins,它有时会崩溃,我想在发生这种情况时自动重新启动它。在 Google 上搜索了一下,我发现在 Systemd 上可以使用 Restart=on-failure,但问题是据我所知,Jenkins 不使用服务文件。
如果我执行 systemctl status 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
在这种情况下如何使用它吗?
答案1
作为一个完全糟糕的解决方案,您可以指出systemd
jenkins init 脚本,因为该脚本有一大堆烦人的“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
认为理想情况下长期更好的选择是让詹金斯人在他们的 RPM 中直接支持 systemd......
答案2
我可以提供 systemd-file,它是对以下代码的修改:詹金斯维基:
[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
这比 @thrig 在 Ubuntu 16.04 上通过 apt 安装 Jenkins 的方法好得多。这样你就不再需要 /etc/init.d/jenkins 和 /etc/default/jenkins 了,还可以直接在 journalctl 中获取日志。
答案3
Jenkins 软件包仍然只附带一个 SysV 初始化文件,因此无法使用 systemd 特定的行为。我提交了一份错误报告,请求在软件包中附带一个 systemd 单元文件。https://issues.jenkins-ci.org/browse/JENKINS-41218