Unix环境下Tomcat服务器Java升级后无法启动的解决方法
Tomcat升级Java后无法启动且
which java返回旧版本的解决办法 嘿,我来帮你搞定这个问题!你升级Java后Tomcat启动失败,而且which java还显示旧版本,核心问题在于Tomcat的启动脚本默认会依赖系统的which java结果,而你的系统PATH里旧Java的优先级还比新的高。先给你拆解下你贴的那个脚本逻辑,再一步步解决:
脚本逻辑拆解
你提供的Tomcat启动脚本是这么找Java路径的:
- 先检查有没有设置
JAVA_HOME或JRE_HOME环境变量,如果有就直接用; - 如果没设置,就通过
which java找系统默认的Java执行文件,再推导JRE_HOME; - 如果
which java也找不到,就 fallback 到/usr/bin/java对应的/usr目录作为JRE_HOME。
所以问题很明确:你虽然装了新Java,但系统PATH里旧Java的位置排在前面,导致which java返回旧版本,Tomcat就跟着用旧的了——而你升级后旧版本可能和Tomcat不兼容,所以启动失败。
解决步骤
1. 找到新Java的安装路径
先定位你新安装的Java/JRE在哪里,比如可以用下面的命令查找:
find / -name java -type f -executable | grep -v old
(把old换成你旧Java的关键词,或者直接看输出里的新路径,比如可能是/usr/lib/jvm/java-11-openjdk-amd64/bin/java)
记下这个路径的父目录,比如上面的例子里就是/usr/lib/jvm/java-11-openjdk-amd64(JAVA_HOME),如果是单独的JRE就是/usr/lib/jvm/java-11-openjdk-amd64/jre(JRE_HOME)。
2. 让Tomcat优先使用新Java(两种方法选一个就行)
方法一:给Tomcat单独设置环境变量(推荐)
Tomcat支持通过setenv.sh来配置专属环境变量,不会影响系统全局:
- 进入Tomcat的
bin目录,查看有没有setenv.sh文件,如果没有就新建一个:cd /path/to/your/tomcat/bin touch setenv.sh chmod +x setenv.sh - 编辑
setenv.sh,添加以下内容(替换成你自己的新Java路径):
如果你的新Java是单独的JRE,直接写export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export JRE_HOME=$JAVA_HOME/jreexport JRE_HOME=/path/to/new/jre就行。
方法二:修改系统全局环境变量
如果你想让整个系统都默认用新Java,可以修改系统的PATH:
- 编辑
/etc/profile(全局生效)或者~/.bashrc(当前用户生效),在文件末尾添加:export PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 - 执行下面的命令让修改立即生效:
source /etc/profile # 全局生效用这个 # 或者 source ~/.bashrc # 当前用户生效用这个
3. 验证修改是否生效
- 先检查环境变量和
which java的结果:
确保输出的都是你新Java的路径。echo $JAVA_HOME echo $JRE_HOME which java - 启动Tomcat,查看
catalina.out日志(在Tomcat的logs目录下),搜索Java version,确认Tomcat已经在用新的Java版本了。
内容的提问来源于stack exchange,提问作者Sushmitha K
相关产品推荐
相关产品推荐

