Linux系统中Tomcat如何更新
小樊
39
2025-12-30 13:55:09
Linux系统中Tomcat更新实操指南
一 准备与兼容性检查
- 查看当前版本与环境
- 进入安装目录执行:cd $CATALINA_HOME/bin && ./version.sh,确认当前 Tomcat 与 JVM 版本。
- 核对 JDK 与 Tomcat 的版本对应关系(升级前必做)
- Tomcat 11.0.x → JDK 21+
- Tomcat 10.1.x → JDK 11+
- Tomcat 9.0.x → JDK 1.8+
- Tomcat 8.5.x → JDK 1.7+
- 跨主版本注意命名空间变更:Tomcat 10+ 使用 jakarta.*(Jakarta EE 9+),不向下兼容 javax.*;若从 Tomcat 9 升到 10.1/11,需评估依赖与代码迁移成本。
- 规划升级路径
- 小版本(如 9.0.x → 9.0.y)通常可直接沿用配置与部署;
- 跨主版本(如 8.5 → 9.0、9.0 → 10.1/11)务必在测试环境充分验证(Servlet/JSP API、依赖库、启动参数、连接器配置等)。
二 标准升级步骤
- 备份
- 备份整个 Tomcat 目录与应用数据(含数据库),至少备份 conf/(如 server.xml、web.xml、tomcat-users.xml)、webapps/、必要的 logs/ 与自定义脚本。
- 停止服务
- 正常停止:cd $CATALINA_HOME/bin && ./shutdown.sh;
- 若作为系统服务运行:执行 systemctl stop tomcat 或 service tomcat stop;必要时用 ps -ef | grep tomcat 检查残留进程并清理。
- 安装新版本
- 从官网下载所需版本压缩包,解压到新目录(如 /usr/local/apache-tomcat-9.0.x),再重命名为统一路径(如 /usr/local/apache-tomcat)。
- 迁移配置与应用
- 仅迁移必要配置:将旧 conf/ 覆盖到新目录(建议逐项比对,避免引入过时或危险配置);
- 迁移 webapps/(WAR 包或解压目录);如需保留历史日志可拷贝 logs/;
- 可选:删除新包自带的默认应用(如 docs、examples、manager、host-manager)以降低攻击面。
- 权限与服务单元
- 赋予脚本可执行权限:chmod +x $CATALINA_HOME/bin/*.sh;
- 若使用 systemd,确保 /etc/systemd/system/tomcat.service 中的 JAVA_HOME、CATALINA_HOME、CATALINA_BASE、User/Group 等路径与新版本一致,然后执行 systemctl daemon-reload。
- 启动与验证
- 启动:$CATALINA_HOME/bin/startup.sh 或 systemctl start tomcat;
- 验证:查看 $CATALINA_HOME/logs/catalina.out 是否有异常,访问应用首页与管理端(如启用)确认功能正常;再次执行 ./version.sh 确认版本号。
三 回滚方案
- 快速回滚(适用于小版本或配置未大幅变更)
- 停止新实例:$CATALINA_HOME/bin/shutdown.sh 或 systemctl stop tomcat;
- 恢复原目录:删除或重命名新版本目录,将备份的旧目录(如 apache-tomcat-old)恢复为 /usr/local/apache-tomcat;
- 启动旧版本并复核日志与业务功能。
四 常见问题与排查要点
- 启动脚本无执行权限
- 现象:提示 “Cannot find ./catalina.sh / The file … does not have execute permission”;
- 处理:chmod +x $CATALINA_HOME/bin/*.sh。
- JDK 不匹配
- 现象:启动失败或报 “Unsupported major.minor version …”;
- 处理:对照版本矩阵调整 JDK 或 Tomcat 版本,使二者匹配。
- 跨主版本 404/类找不到
- 现象:从 Tomcat 9 升到 10.1/11 后出现 404 或 ClassNotFoundException: jakarta/servlet/…;
- 处理:检查依赖是否迁移到 jakarta.*(Jakarta EE 9+),必要时使用 tomcat-jakartaee-migration 工具迁移,并更新代码/依赖;同时复核 server.xml 与 web.xml 配置差异。
- 升级后访问异常
- 处理:优先查看 catalina.out、localhost.log、manager.log 定位配置、部署与权限问题;对比新旧版本的 server.xml/context.xml 差异(端口、协议、类加载、Valve、Realm 等)。