如何在 Systemd 上使用 Jenkins 自动重启

如何在 Systemd 上使用 Jenkins 自动重启

我在 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

作为一个完全糟糕的解决方案,您可以指出systemdjenkins 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

相关内容