温馨提示×

Linux系统中Tomcat如何更新

小樊
39
2025-12-30 13:55:09
栏目: 智能运维

Linux系统中Tomcat更新实操指南

一 准备与兼容性检查

  • 查看当前版本与环境
    • 进入安装目录执行:cd $CATALINA_HOME/bin && ./version.sh,确认当前 TomcatJVM 版本。
  • 核对 JDKTomcat 的版本对应关系(升级前必做)
    • 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.09.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 tomcatservice 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.shsystemctl start tomcat
    • 验证:查看 $CATALINA_HOME/logs/catalina.out 是否有异常,访问应用首页与管理端(如启用)确认功能正常;再次执行 ./version.sh 确认版本号。

三 回滚方案

  • 快速回滚(适用于小版本或配置未大幅变更)
    • 停止新实例:$CATALINA_HOME/bin/shutdown.shsystemctl 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 …”;
    • 处理:对照版本矩阵调整 JDKTomcat 版本,使二者匹配。
  • 跨主版本 404/类找不到
    • 现象:从 Tomcat 9 升到 10.1/11 后出现 404ClassNotFoundException: jakarta/servlet/…
    • 处理:检查依赖是否迁移到 jakarta.*(Jakarta EE 9+),必要时使用 tomcat-jakartaee-migration 工具迁移,并更新代码/依赖;同时复核 server.xmlweb.xml 配置差异。
  • 升级后访问异常
    • 处理:优先查看 catalina.out、localhost.log、manager.log 定位配置、部署与权限问题;对比新旧版本的 server.xml/context.xml 差异(端口、协议、类加载、Valve、Realm 等)。

0