Centos中将openjdk切换为Oracle Jdk导致Tomcat无法正常启动的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jaune161/article/details/47838217

设置JDK环境变量,并且命令行使用java -version

使用service tomcat-web1 start命令报下面的错误
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined. At least one of these environment variable is needed to run this program

注:tomcat-web1为Tomcat服务名,Tomcat设置服务的方法网上有很多不再赘述

一种方法是修改setclasspath.sh,在sh脚本开头加入
JAVA_HOME=/usr/lib/java-1.7.0
但是这种方法并不好,如果Java home发生变化还需要修改shell

所以用另一种方法,先看shell脚本

CATALINA_HOME_DATA=/usr/local/tomcat/tomcat7.0
start_tomcat=$CATALINA_HOME_DATA/bin/startup.sh
stop_tomcat=$CATALINA_HOME_DATA/bin/shutdown.sh

start(){
    ${start_tomcat}
    if [ $? -eq 0 ]; then
        printf "Tomcat7-data started \t\t\t\t\t[\033[32m OK \033[m]\n";
    else
        printf "Tomcat7-data started \t\t\t\t\t[\033[31m FAIL \033[m]\n";
    fi

}

service运行指定服务(称之为System V初始脚本)时,把大部分环境变量去掉了,只保留LANG和TERM两个环境变量,并且把当前路径置为/,也就是说是在一个可以预测的非常干净的环境中运行服务脚本。
所以在脚本运行的时候找不到环境变量,所以修改成下面的脚本

CATALINA_HOME_DATA=/usr/local/tomcat/tomcat7.0
start_tomcat=$CATALINA_HOME_DATA/bin/startup.sh
stop_tomcat=$CATALINA_HOME_DATA/bin/shutdown.sh

start(){
    su - root -c "${start_tomcat}"
    if [ $? -eq 0 ]; then
        printf "Tomcat7-data started \t\t\t\t\t[\033[32m OK \033[m]\n";
    else
        printf "Tomcat7-data started \t\t\t\t\t[\033[31m FAIL \033[m]\n";
    fi

}

su - root -c “${start_tomcat}”
-表示执行环境变量
-c是执行命令
整体命令的意思是使用root用户且带环境变量的方式执行/usr/local/tomcat/tomcat7.0/bin/startup.sh命令

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页