CentOS 7.6环境下Jenkins 2.346.2启动失败求助
Jenkins启动失败问题排查与解决
环境信息
- 系统:CentOS 7.6
- Jenkins版本:2.346.2
- Java版本:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64(切换Java 11会触发新错误)
核心问题分析
1. JENKINS_JAVA_CMD变量初始化逻辑错误
/etc/rc.d/init.d/jenkins中初始化JENKINS_JAVA_CMD的代码存在逻辑缺陷:
candidates=" /etc/alternatives/java /usr/lib/jvm/java-1.8.0/bin/java /usr/lib/jvm/jre-1.8.0/bin/java /usr/lib/jvm/java-11.0/bin/java /usr/lib/jvm/jre-11.0/bin/java /usr/lib/jvm/java-11-openjdk-amd64 /usr/bin/java /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java " for candidate in $candidates do [ -x "$JENKINS_JAVA_CMD" ] && break JENKINS_JAVA_CMD="$candidate" done
初始状态下JENKINS_JAVA_CMD为空,[ -x "" ]返回false,导致循环会遍历所有候选路径,但无法正确匹配可执行的Java路径,最终可能导致变量为空。
2. 端口占用与核心类加载失败
从jenkins.log可提取两个关键错误:
- 端口占用:
java.net.BindException: Address already in use,8089端口被占用导致Jetty启动失败 - 类加载失败:
java.lang.NoClassDefFoundError: hudson/util/HudsonFailedToLoad,Jenkins核心文件损坏,恢复备份war包后仍存在完整性问题
服务启动失败状态
执行systemctl status jenkins输出:
[root@localhost log]# systemctl status jenkins ● jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled) Active: failed (Result: exit-code) since Mon 2023-07-17 23:34:43 IST; 2s ago Docs: man:systemd-sysv-generator(8) Process: 28719 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE) Tasks: 72 Memory: 1.8G CGroup: /system.slice/jenkins.service ├─26370 /bin/sh -xe /tmp/jenkins3788405557627827271.sh ├─26373 python3 main_exec_file.py ├─26762 /bin/python /bin/ansible-playbook ./play_books/build_image.yml ├─26876 /bin/python /bin/ansible-playbook ./play_books/build_image.yml ├─26890 /bin/sh -c /usr/bin/python /root/.ansible/tmp/ansible-tmp-1689616762.75-75003044585972/AnsiballZ_command.py && sleep 0 ├─26891 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1689616762.75-75003044585972/AnsiballZ_command.py ├─28722 runuser -s /bin/bash root -c ulimit -S -c 0 >/dev/null 2>&1 ; /etc/alternatives/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /u... ├─28723 bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /etc/alternatives/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkin... └─28724 /etc/alternatives/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.... Jul 17 23:34:43 localhost.localdomain jenkins[28719]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Jul 17 23:34:43 localhost.localdomain jenkins[28719]: at java.lang.reflect.Method.invoke(Method.java:498) Jul 17 23:34:43 localhost.localdomain jenkins[28719]: at Main._main(Main.java:342) Jul 17 23:34:43 localhost.localdomain jenkins[28719]: at Main.main(Main.java:117) Jul 17 23:34:43 localhost.localdomain runuser[28746]: pam_unix(runuser:session): session closed for user root Jul 17 23:34:43 localhost.localdomain jenkins[28719]: [FAILED] Jul 17 23:34:43 localhost.localdomain systemd[1]: jenkins.service: control process exited, code=exited status=1 Jul 17 23:34:43 localhost.localdomain systemd[1]: Failed to start LSB: Jenkins Automation Server. Jul 17 23:34:43 localhost.localdomain systemd[1]: Unit jenkins.service entered failed state. Jul 17 23:34:43 localhost.localdomain systemd[1]: jenkins.service failed.
系统磁盘状态
磁盘空间充足,排除磁盘满导致的问题:
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 118G 68G 50G 58% / devtmpfs 3.8G 0 3.8G 0% /dev tmpfs 3.8G 132K 3.8G 1% /dev/shm tmpfs 3.8G 98M 3.7G 3% /run tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup /dev/sda1 1014M 180M 835M 18% /boot /dev/loop0 4.8M 4.8M 0 100% /var/lib/snapd/snap/yq/1787 /dev/loop1 182M 182M 0 100% /var/lib/snapd/snap/postman/179 /dev/loop3 56M 56M 0 100% /var/lib/snapd/snap/core18/2284 /dev/loop4 4.8M 4.8M 0 100% /var/lib/snapd/snap/yq/1792 /dev/loop2 182M 182M 0 100% /var/lib/snapd/snap/postman/178 /dev/loop6 56M 56M 0 100% /var/lib/snapd/snap/core18/2409 /dev/loop5 47M 47M 0 100% /var/lib/snapd/snap/snapd/16010 /dev/loop7 47M 47M 0 100% /var/lib/snapd/snap/snapd/16292 /dev/mapper/centos-home 19G 18G 809M 96% /home tmpfs 766M 4.0K 766M 1% /run/user/42 tmpfs 766M 52K 766M 1% /run/user/0 overlay 118G 68G 50G 58% /var/lib/docker/overlay2/07b6cb0d553b90b44b2a2bccb24a20e81637bd76d1cb149acf57eb3671dd6541/merged
Jenkins日志详情
Running from: /usr/lib/jenkins/jenkins.war Exception in thread "Jenkins initialization thread" java.lang.NoClassDefFoundError: hudson/util/HudsonFailedToLoad at hudson.WebAppMain$3.run(WebAppMain.java:261) Caused by: java.lang.ClassNotFoundException: hudson.util.HudsonFailedToLoad at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:538) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 1 more java.io.IOException: Failed to start Jetty at winstone.Launcher.<init>(Launcher.java:206) at winstone.Launcher.main(Launcher.java:405) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at Main._main(Main.java:342) at Main.main(Main.java:117) Caused by: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8089 at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:349) at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:310) at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:234) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) at org.eclipse.jetty.server.Server.doStart(Server.java:401) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) at winstone.Launcher.<init>(Launcher.java:202) ... 7 more Caused by: java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:461) at sun.nio.ch.Net.bind(Net.java:453) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85) at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344) ... 14 more Running from: /usr/lib/jenkins/jenkins.war Exception in thread "Jenkins initialization thread" java.lang.NoClassDefFoundError: hudson/util/HudsonFailedToLoad at hudson.WebAppMain$3.run(WebAppMain.java:261) Caused by: java.lang.ClassNotFoundException: hudson.util.HudsonFailedToLoad at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:538) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 1 more java.io.IOException: Failed to start Jetty at winstone.Launcher.<init>(Launcher.java:206) at winstone.Launcher.main(Launcher.java:405) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at Main._main(Main.java:342) at Main.main(Main.java:117) Caused by: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8089 at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:349) at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:310) at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:234) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) at org.eclipse.jetty.server.Server.doStart(Server.java:401) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) at winstone.Launcher.<init>(Launcher.java:202)
已尝试操作
- yum升级Jenkins
- 修改Java路径并重启服务
- 恢复
jenkins.war.bak备份文件
解决方案步骤
1. 清理端口占用
- 查找占用8089端口的进程:
lsof -i :8089 # 或 netstat -tulpn | grep 8089 - 终止占用进程(替换
<PID>为实际进程ID):kill -9 <PID> - 清理残留的Jenkins进程:
pkill -f jenkins
2. 修复Java路径初始化逻辑
编辑/etc/rc.d/init.d/jenkins,替换原有循环逻辑:
candidates=" /etc/alternatives/java /usr/lib/jvm/java-1.8.0/bin/java /usr/lib/jvm/jre-1.8.0/bin/java /usr/bin/java /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java /usr/lib/jvm/java-11.0/bin/java /usr/lib/jvm/jre-11.0/bin/java /usr/lib/jvm/java-11-openjdk-amd64 " JENKINS_JAVA_CMD="" for candidate in $candidates do if [ -x "$candidate" ]; then JENKINS_JAVA_CMD="$candidate" break fi done # 强制指定Java路径(确保变量不为空) export JENKINS_JAVA_CMD="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java"
赋予脚本执行权限:
chmod +x /etc/rc.d/init.d/jenkins
3. 修复核心文件损坏
- 备份Jenkins主目录:
cp -r /var/lib/jenkins /var/lib/jenkins_backup - 下载官方2.346.2版本war包:
wget https://get.jenkins.io/war-stable/2.346.2/jenkins.war -O /usr/lib/jenkins/jenkins.war - 清理临时文件:
rm -rf /tmp/jenkins*
4. 重启服务验证
systemctl daemon-reload systemctl restart jenkins systemctl status jenkins
重启后检查UI访问情况,触发管道任务验证执行状态。
内容的提问来源于stack exchange,提问作者Shobhit Solanki
相关产品推荐
相关产品推荐

