天天看点

tomcat catalina.sh 解析

了解 catalina。sh 里的构造,对debug    tomcat有决定性的作用。

// 获取  当前执行的脚本的名字

PRG="$0"      

//  按照英文翻译 是处理软链接的  没看懂

while [ -h "$PRG" ]; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '.*/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done      

// 获取  catalina 的路径

PRGDIR=`dirname "$PRG"`      
//设置 CATALINA_HOME路径      
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
      

// 确认环境变量 if $cygwin; then   [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`   [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`   [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`   [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`   [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"` fi

//  设置  改变classpath中的东西 if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then     . "$CATALINA_HOME"/bin/setclasspath.sh   else     echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"     echo "This file is needed to run this program"     exit 1   fi

//追加 bootstrap.jar 到    CATALINA_HOME 中 if [ ! -z "$CLASSPATH" ] ; then   CLASSPATH="$CLASSPATH": fi CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar

// 设置CATALINA_OUT 的路径 if [ -z "$CATALINA_OUT" ] ; then   CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out fi

//  追加 jar包 if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then   CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar else   CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar fi // 配置 log if [ -z "$LOGGING_CONFIG" ]; then   if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then     LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"   else     # Bugzilla 45585     LOGGING_CONFIG="-Dnop"   fi fi

if [ -z "$LOGGING_MANAGER" ]; then   JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" else   JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER" fi

// 重点讲解一下  当参数是 start的时候    也就是执行  start.sh 的那个脚本的时候 ,我们需要干的事情。  touch "$CATALINA_OUT"   if [ "$1" = "-security" ] ; then     if [ $have_tty -eq 1 ]; then       echo "Using Security Manager"     fi     shift     eval \"$_RUNJAVA\" \"$LOGGING_CONFIG\" $JAVA_OPTS $CATALINA_OPTS \       -Djava.endorsed.dirs=\"$JAVA_ENDORSED_DIRS\" -classpath \"$CLASSPATH\" \       -Djava.security.manager \       -Djava.security.policy==\"$CATALINA_BASE/conf/catalina.policy\" \       -Dcatalina.base=\"$CATALINA_BASE\" \       -Dcatalina.home=\"$CATALINA_HOME\" \       -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \    //  把所有的参数设置进去   然后执行 start参数       org.apache.catalina.startup.Bootstrap "[email protected]" start \ //    把所有的东西写道 catalina.out中。       >> "$CATALINA_OUT" 2>&1 "&"