You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重启Tomcat后Jenkins启动失败的原因是什么?

Tomcat重启后Jenkins上下文启动失败,报错Unable to inject class jenkins.slaves.NioChannelSelector

问题描述

我在Tomcat 9.0.67中成功部署了Jenkins 2.361.1,初始状态下可通过http://localhost:8080/jenkins正常访问。但使用shutdown.bat关闭Tomcat再用startup.bat重启后,Tomcat日志出现以下错误:

SEVERE [main] org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the appropriate container log file
SEVERE [main] org.apache.catalina.core.StandardContext.startInternal Context [/jenkins] startup failed due to previous errors
INFO [main] hudson.lifecycle.Lifecycle.onStatusUpdate Stopping Jenkins
INFO [main] jenkins.model.Jenkins$16.onAttained Started termination
SEVERE [main] jenkins.model.Jenkins$16.onTaskFailed Failed NioChannelSelector.cleanUp
        java.lang.IllegalArgumentException: Unable to inject class jenkins.slaves.NioChannelSelector
                at hudson.init.TaskMethodFinder.lookUp(TaskMethodFinder.java:130)
                ...

此时http://localhost:8080仍可正常访问,但http://localhost:8080/jenkins返回404页面。Tomcat是压缩包解压安装的,关闭后未做任何修改,请问该错误的原因是什么?

可能的原因及解决方案

1. Jenkins工作目录权限异常

Jenkins默认工作目录(通常是%CATALINA_HOME%/.jenkins或当前系统用户目录下的.jenkins)在Tomcat重启后可能出现权限问题,导致Jenkins无法读写配置文件或临时数据,进而引发类注入失败。

  • 解决:检查.jenkins目录的读写权限,确保Tomcat运行用户对该目录拥有完整的读写权限。Windows系统可通过右键目录→属性→安全选项卡添加权限;Linux系统使用chown -R <tomcat-user> <jenkins-dir>和chmod -R 755 <jenkins-dir>调整。

2. Tomcat临时目录缓存冲突

Tomcat的temp目录(%CATALINA_HOME%/temp)中残留的Jenkins相关缓存文件可能在重启时干扰类加载,导致过滤器启动失败。

  • 解决:关闭Tomcat后,删除temp目录下的所有文件及子目录,再重新启动Tomcat。

3. Jenkins部署文件损坏或残留

虽然初始部署成功,但Tomcat重启时可能读取到损坏的部署缓存或残留文件,引发上下文启动失败。

  • 解决:
    • 关闭Tomcat,删除%CATALINA_HOME%/webapps/jenkins目录和jenkins.war文件;
    • 重新下载官方Jenkins 2.361.1的WAR包,放入webapps目录;
    • 启动Tomcat重新完成部署。

4. 类加载冲突

Tomcat自带的类库与Jenkins WAR包中的类库可能存在冲突,尤其是NIO相关类,导致NioChannelSelector无法正常注入。

  • 解决:检查Tomcat的lib目录是否存在额外的NIO相关jar包,若有则移除;若问题仍存在,可尝试更换Tomcat版本(比如9.0.70+)或Jenkins版本,避开已知的类加载冲突。

5. Jenkins初始化任务残留

第一次启动时的Jenkins初始化任务可能未完全完成,重启时残留的初始化脚本或配置导致注入失败。

  • 解决:删除.jenkins目录下的init.groovy.d文件夹(如果存在),或备份后删除.jenkins/config.xml,让Jenkins重新初始化配置。

内容的提问来源于stack exchange,提问作者jpizarra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:20:28