Scenario / Questions

I have Jenkins running on a CentOS7 and it kind of crashes from time to time and I’d like to restart it automatically when this happens. Googleing a bit I’ve found that on Systemd you can use Restart=on-failure but the problem is that from what I see Jenkins does not use a service file.

If I do systemctl status jenkins.service I get:

● 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

So looks like it’s still using init.d? Any idea how I can use this Restart=on-failure in this case?

Find below all possible solutions or suggestions for the above questions..

Suggestion: 1

As a total horrible kluge you could point systemd at the jenkins init script, as that script has a whole bunch of annoying “where’s Java” and other code to figure out how to get jenkins up and running.

# 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

and then the service starts at reboot, is not listed by chkconfig --list, and restarts even if you kill -9 $thepid though ideally long-term a better option would be for the jenkins folk to include direct support for systemd in their RPM…

Suggestion: 2

I can offer systemd-file which is a modification of the code from the 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

That works much better than the one from @thrig on Ubuntu 16.04 with Jenkins installed via apt. This way you don’t need /etc/init.d/jenkins and /etc/default/jenkins anymore and also get the logs directly in journalctl.

Suggestion: 3

Jenkins packages are still shipping with only a SysV init file, so systemd specific behaviours are not available.
I raise a bug report to request that a systemd unit file is shipped in the packages. https://issues.jenkins-ci.org/browse/JENKINS-41218