#!/bin/sh # # tomcatctl # # Tomcat control script to control tomcat running under jsvc. # # USAGE: tomcatctl [--jdpa] start|stop|restart|status|info # # To be customized by installer... PREFIX= TOMCAT_USER= WC=wc JSVC="$PREFIX/bin/jsvc" #JSVC_ENV= #JSVC_DEBUG="-debug -verbose" # Calculate CATALINA_HOME based on our location if [ -z "$CATALINA_HOME" ]; then # Handle symlinks PRG="$0" while [ -L "$PRG" ]; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG="`dirname $PRG`/$link" fi done pushd "`dirname \"$PRG\"`/.." > /dev/null CATALINA_HOME="`pwd -P`" popd > /dev/null fi # Source the setenv.sh file to allow user to configure environment # including JAVA_HOME if [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then . "$CATALINA_HOME/bin/setenv.sh" fi # Source the setclasspath.sh file to allow setup of the CLASSPATH variable BASEDIR="$CATALINA_HOME" . "$CATALINA_HOME/bin/setclasspath.sh" # Set variable default values [ -z "$CATALINA_BASE" ] && CATALINA_BASE="${CATALINA_HOME}" [ -z "$CATALINA_TMPDIR" ] && CATALINA_TMPDIR="${CATALINA_BASE}/temp" [ -z "$TOMCAT_PIDNAME" ] && TOMCAT_PIDNAME="tomcat5.pid" [ -z "$TOMCAT_PIDFILE" ] && TOMCAT_PIDFILE="${CATALINA_BASE}/logs/${TOMCAT_PIDNAME}" [ -z "$TOMCAT_USER" ] && TOMCAT_USER=tomcat [ -z "$JAVA_ENDORSED_DIRS" ] && JAVA_ENDORSED_DIRS=${CATALINA_BASE}/common/endorsed [ -z "$JPDA_TRANSPORT" ] && JPDA_TRANSPORT=dt_socket [ -z "$JPDA_ADDRESS" ] && JPDA_ADDRESS=8000 CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar:"$CATALINA_HOME"/bin/commons-logging-api.jar if [ -r "${CATALINA_HOME}/bin/tomcat-juli.jar" ]; then JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" fi usage() { cat <<EOT USAGE: `basename $0` [--jpda] start|stop|restart|status|info EOT } check() { PID= RUNNING= STATUS= if [ -f "$TOMCAT_PIDFILE" ]; then PID=`cat $TOMCAT_PIDFILE` if [ -n "$PID" -a `ps $PID | $WC -l` -gt 1 ]; then STATUS="running (pid $PID)" RUNNING=$PID else STATUS="not running (stale pid $PID?)" RUNNING= fi else STATUS="not running" RUNNING= fi } start() { # Run conf_setup.sh to check and repair the conf directory if [ -x "$CATALINA_HOME/bin/conf_setup.sh" ]; then CATALINA_BASE="$CATALINA_BASE" "$CATALINA_HOME/bin/conf_setup.sh" fi printf "Starting Tomcat..." check if [ -n "$RUNNING" ]; then printf "already $STATUS\n" else # Remove any existing pid file rm -f "$TOMCAT_PIDFILE" # Start Tomcat using jsvc $JSVC_ENV $JSVC $JSVC_DEBUG $JAVA_OPTS $JPDA_OPTS \ -home "$JAVA_HOME" \ -user "$TOMCAT_USER" \ -classpath "${CLASSPATH}" \ -pidfile "$TOMCAT_PIDFILE" \ -outfile "$CATALINA_BASE/logs/catalina.out" \ -errfile "$CATALINA_BASE/logs/catalina.err" \ -Dcatalina.home="$CATALINA_HOME" \ -Dcatalina.base="$CATALINA_BASE" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ org.apache.catalina.startup.Bootstrap "$@" start # Wait for it to really start for ((CNT=0; CNT < 15; ++CNT)); do [ -f "$TOMCAT_PIDFILE" ] && break printf "." sleep 1 done # Let 'em know what happened check if [ -n "$RUNNING" ]; then printf " started. (pid $PID)\n" else printf " giving up.\n" fi fi } stop() { printf "Stopping Tomcat..." check if [ -z "$RUNNING" ]; then printf "already $STATUS\n" else printf "(pid $PID)" # Stop Tomcat kill $PID # Wait for it to really stop for ((CNT=0; CNT < 15; ++CNT)); do [ -f "$TOMCAT_PIDFILE" ] || break printf "." sleep 1 done # Let 'em know what happened check if [ -z "$RUNNING" ]; then printf " stopped.\n" else printf " giving up.\n" fi fi } # Ensure at least one parameter if [ $# -lt 1 ]; then usage exit 1 fi # Parameter Handling while [ $# -gt 0 ]; do case "$1" in --jpda) [ -z "$JPDA_OPTS" ] && JPDA_OPTS="-Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=n" ;; start) start ;; stop) stop ;; restart) stop start ;; status) check printf "Tomcat is $STATUS\n" ;; info) check cat <<EOT Tomcat is $STATUS CATALINA_HOME $CATALINA_HOME CATALINA_BASE $CATALINA_BASE CATALINA_TMPDIR $CATALINA_TMPDIR JAVA_HOME $JAVA_HOME CLASSPATH $CLASSPATH TOMCAT_PIDFILE $TOMCAT_PIDFILE JAVA_OPTS $JAVA_OPTS JPDA_OPTS $JPDA_OPTS EOT ;; *) printf "$0: unrecognized option '$1'\n" usage exit 1 ;; esac shift done