问题描述:

启动tomcat的时候报错如下:

[root@pacteralinux bin]# ./startup.shCannot find /usr/local/tomcat7/bin/setclasspath.shThis file is needed to run this program[root@pacteralinux bin]# sh catalina.sh runCannot find /usr/local/tomcat7/bin/setclasspath.shThis file is needed to run this program
  • 之前以为是环境变量配置错误,但是检查了下,没有问题呀!

  • 以为是权限的问题,直接chmod 777 *.sh ,,还是不行,报同样错误

  • 再看到网上的一个解决方案:

需要你包含完整的路径,应该各自在setclasspath.sh和catalina.sh指定BASEDIR 和 CATALINA_HOME环境变量。如果已经在以前的命令行中或者/etc/profile文件中定义了 CATALINA_HOME环境变量,也需要这么做。这个错误也还是可能出现的即使setclasspath.sh存在于Tomcat\bin目录中。
$ echo "BASEDIR=/path/to/tomcat" >> setclasspath.sh
$ echo "CATALINA_HOME=/path/to/tomcat" >> catalina.sh

试验了一下,还是不行!

我的解决方法:因为我在系统中启动了几个tomcat,在/etc/profile中环境变量的配置如下:

#set java environmentexport JAVA_HOME=/usr/lib/jvm/java-7-sunexport JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:$CLASSPATH:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH#set tomcat environment#1CATALINA_BASE=/usr/local/Tomcat_WebCATALINA_HOME=/usr/local/Tomcat_Webexport CLASSPATH=.:${CATALINA_HOME}/bin/tomcat-juli.jar:${CATALINA_HOME}/bin/bootstrap.jarexport CATALINA_BASE CATALINA_HOME#2CATALINA_BASE_11=/usr/local/jakarta-tomcat-5.0.28CATALINA_HOME_11=/usr/local/jakarta-tomcat-5.0.28export CLASSPATH=.:${CATALINA_HOME_11}/bin/tomcat-juli.jar:${CATALINA_HOME_11}/bin/bootstrap.jarexport CATALINA_BASE_11 CATALINA_HOME_11#3CATALINA_2_BASE=/usr/local/Tomcat_CalculateCATALINA_2_HOME=/usr/local/Tomcat_Calculateexport CATALINA_2_BASE CATALINA_2_HOMECATALINA_3_BASE=/usr/local/Tomcat_TransCATALINA_3_HOME=/usr/local/Tomcat_Transexport CATALINA_3_BASE CATALINA_3_HOME set JAVA_OPTS= -Xms32m -Xmx512mexport JAVA_OPTS#4CATALINA_BASE_rao=/usr/local/tomcat7CATALINA_HOME_rao=/usr/local/tomcat7export CLASSPATH=.:${CATALINA_HOME_rao}/bin/tomcat-juli.jar:${CATALINA_HOME_rao}/bin/bootstrap.jarexport CATALINA_BASE_rao CATALINA_HOME_rao

出错的是第四个tomcat,我想了下,可能是catalina.sh启动脚本中变量的配置错误。

首先vi catalina.sh     查找setclasspath   果然看到的了如下语句

if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then    . "$CATALINA_HOME_rao"/bin/setclasspath.sh  else    echo "Cannot find $CATALINA_HOME_rao/bin/setclasspath.sh"    echo "This file is needed to run this program"    exit 1  fi

好吧,找到错误了,改为

if [ -r "$CATALINA_HOME_rao"/bin/setclasspath.sh ]; then    . "$CATALINA_HOME_rao"/bin/setclasspath.sh  else    echo "Cannot find $CATALINA_HOME_rao/bin/setclasspath.sh"    echo "This file is needed to run this program"    exit 1  fi

即可!