CentOS7でJenkinsを実行していますが、時々クラッシュするので、これが発生したときに自動的に再起動したいと思います。少しグーグルすると、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
この場合?
完全に恐ろしいクルージとして、systemd
をjenkins initスクリプトに向けることができます。そのスクリプトには、jnkinsを起動して実行する方法を理解するための迷惑な「Javaの場所」やその他のコードがたくさんあるためです。
# 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
でも再起動しますが、jenkinsの人々がsystemdに直接サポートを含めるのが理想的ですが、長期的にはより良いオプションです。 RPM .. ..
Jenkins Wiki からのコードの変更である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
これは、aptを介してJenkinsがインストールされているUbuntu16.04の@thrigのものよりもはるかにうまく機能します。これにより、/ etc/init.d/jenkinsと/ etc/default/jenkinsが不要になり、journalctlで直接ログを取得できます。
JenkinsパッケージはまだSysVinitファイルのみで出荷されているため、systemd固有の動作は利用できません。 systemdユニットファイルがパッケージで出荷されるように要求するバグレポートを作成します。 https://issues.jenkins-ci.org/browse/JENKINS-41218