#背景
https://wiki.jenkins-ci.org/display/JENKINS/HudsonUbuntuLinuxStartupScript
この用に、/etc/init.d/jenkins
にinit scriptを書いて、Jenkinsをうごかしていたが、同じサーバ上で他のプロセスがMemoryを使ったときか、CPU使用率が高いときかに、勝手にダウンして、systemctl status jenkins
では、Activeとなっているのに、実際には、死んでいて、Jenkinsを開こうとして初めて、Bad Gatewayとなっていた。
#解決策: init.d -> systemdへ変更
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Unix+daemon を参考に、
/etc/systemd/system/jenkins.service
をRootで作る。
ExecStartには、/etc/init.d/jenkinsの中の do_start関数内の起動している部分のスクリプトをだいたい書くことになる。daemonの部分はいらないので、注意。
[Unit]
Description=Jenkins Daemon
[Service]
ExecStart=/usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
User=jenkins
Restart=always
RestartSec=300s
Environment="JENKINS_HOME=/var/lib/jenkins"
[Install]
WantedBy=multi-user.target
だいたいこんな感じである。
Serviceの中に、ExecStartにスタートのコマンドを書く。
Restartをalwaysにすることで、落ちても勝手に再起動できる。
RestartSecは好みで決める。
EnvにJenkinsのホームを書いておかないと今までのJenkinsをちゃんと参照できない。
#ハマったところ
Environment="JENKINS_HOME=/var/lib/jenkins"を書かないと、JenkinsのSecretキーを入れさせられて、全くまっさらなJenkinsが起動して、全て消えたかと思って焦った。