У меня Jenkins работает на CentOS7, и он время от времени дает сбой, и я хотел бы перезапустить его автоматически, когда это произойдет. Немного погуглив, я обнаружил, что в 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, так как в этом сценарии есть множество надоедливых "где находится 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
хотя в идеале в долгосрочной перспективе лучшим вариантом было бы для людей jenkins включить прямую поддержку systemd в свои RPM ...
Могу предложить systemd-файл, который представляет собой модификацию кода из Дженкинс вики:
[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 с Jenkins, установленным через apt. Таким образом, вам больше не нужны /etc/init.d/jenkins и / etc / default / jenkins, а также получать журналы непосредственно в journalctl.
Пакеты Jenkins по-прежнему поставляются только с файлом инициализации SysV, поэтому поведение, специфичное для systemd, недоступно. Я поднимаю отчет об ошибке, чтобы запросить отправку файла модуля systemd в пакетах. https://issues.jenkins-ci.org/browse/JENKINS-41218