最近有朋友在启动服务器的Tomcat时,返回启动信息中JRE_HOME字段出现错误,同时Tomcat服务器运行Java类异常;
Tomcat的启动信息类似如下:
Using CATALINA_BASE: /apache-tomcat-8.5.16
Using CATALINA_HOME: /apache-tomcat-8.5.16
Using CATALINA_TMPDIR: /apache-tomcat-8.5.16/temp
Using JRE_HOME: /usr
Using CLASSPATH: /apache-tomcat-8.5.16/bin/bootstrap.jar:/apache-tomcat-8.5.16/bin/tomcat-juli.jar
Tomcat started.
其中JRE_HOME与配置的JRE路径不同(这里假设实际路径为/usr/lib/java-1.8.0-opendjk/jre),在探究了一番后,总结出来的这类问题的解决思路如下:
1、检查全局配置中JRE_HOME的配置是否正确
可以在命令行中输入:
echo $JRE_HOME
根据返回的信息来判断,如果$JRE_HOME字段错误,可以添加这个全局字段,编辑 /etc/profile
vim /etc/profile
添加或修改 JRE_HOME 字段;
再重新更新配置文件,就可以了
source /etc/profile
2、如果全局JRE_HOME字段正常或者通过以上方法,Tomcat启动返回的JRE_HOME 任然错误,那么有可能是Tomcat启动时使用了局部的JRE_HOME字段,此时可以通过强制规定Tomcat启动配置来解决;
编辑 Tomcat根目录/bin/setclasspath.sh ,在文件的开头添加以下
export JAVA_HOME=/usr/lib/jvm/java-openjdk
export JRE_HOME=/usr/lib/jvm/java-openjdk/jre
其中JAVA_HOME,JRE_HOME的值添加为实际的路径;
之后再重新启动Tomcat,返回信息正确:
Using CATALINA_BASE: /apache-tomcat-8.5.16
Using CATALINA_HOME: /apache-tomcat-8.5.16
Using CATALINA_TMPDIR: /apache-tomcat-8.5.16/temp
Using JRE_HOME: /usr/lib/java-1.8.0-opendjk/jre
Using CLASSPATH: /apache-tomcat-8.5.16/bin/bootstrap.jar:/apache-tomcat-8.5.16/bin/tomcat-juli.jar
Tomcat started.
我的朋友是由于后期更改了tomcat的用户组,使tomcat直接读取父类JRE_HOME字段,直接读取系统中预安装的该用户组的Java配置文件,而不是全局的JRE_HOME字段,才导致这样的异常,通过方法2解决;