#!/bin/sh# chkconfig:2345 10 90# description:tomcat service
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"CATALINA_PID=/opt/tomcat7/pid.log
CATALINA_HOME=/opt/tomcat7
# OS specific support. $var _must_ be set to eithertrue or false.
cygwin=falsedarwin=falseos400=false
case "`uname`" inCYGWIN*) cygwin=true;;
Darwin*) darwin=true;;
OS400*) os400=true;;esac# resolve links- $0may be a softlink
PRG="$0"
while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : ‘.*-> \(.*\)$‘`if expr "$link" : ‘/.*‘ > /dev/null; thenPRG="$link"
elsePRG=`dirname "$PRG"`/"$link"
fi
done# Get standard environment variables
PRGDIR=`dirname "$PRG"`
# Only set CATALINA_HOMEifnot already set
[-z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
# Copy CATALINA_BASE from CATALINA_HOMEifnot already set
[-z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specifiedin setenv.sh, in rare casewhen it is needed.
CLASSPATH=
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then."$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then."$CATALINA_HOME/bin/setenv.sh"
fi# For Cygwin, ensure paths areinUNIX format before anything is touchedif $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# For OS400if $os400; then# Set job priority to standardfor interactive (interactive - 6) by using
# the interactive priority- 6, the helper threads that respond to requests
# will be running at the same priority as interactive jobs.
COMMAND=‘chgjob job(‘$JOBNAME‘) runpty(6)‘system $COMMAND
# Enable multi threading
export QIBM_MULTI_THREADED=Yfi# Get standard Java environment variablesif $os400; then#-r will Only work on the os400 ifthe files are:
#1. owned by the user
#2. owned by the PRIMARY group of the user
# this will not workif the user belongs in secondary groups."$CATALINA_HOME"/bin/setclasspath.sh
else
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"exit1
fi
fi# Add on extra jar files to CLASSPATHif [ ! -z "$CLASSPATH" ] ; thenCLASSPATH="$CLASSPATH":fiCLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jarif [ -z "$CATALINA_OUT" ] ; thenCATALINA_OUT="$CATALINA_BASE"/logs/catalina.outfi
if [ -z "$CATALINA_TMPDIR" ] ; then# Define the java.io.tmpdir to useforCatalina
CATALINA_TMPDIR="$CATALINA_BASE"/tempfi# Add tomcat-juli.jar to classpath
# tomcat-juli.jar can be over-ridden per instanceif [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; thenCLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jarelseCLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jarfi# Bugzilla37848: When no TTY is available, don‘t output to console
have_tty=0
if [ "`tty`" != "not a tty" ]; thenhave_tty=1
fi# For Cygwin, switch paths to Windows format before running javaif $cygwin; thenJAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`fi# Set juli LogManager configfile ifit is present and an override has not been issuedif [ -z "$LOGGING_CONFIG" ]; then
if [ -r "$CATALINA_BASE"/conf/logging.properties ]; thenLOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
else# Bugzilla45585LOGGING_CONFIG="-Dnop"
fi
fi
if [ -z "$LOGGING_MANAGER" ]; thenLOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
fi# Uncomment the following line tomakethe umask available when using the
# org.apache.catalina.security.SecurityListener
#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"#----- Execute The Requested Command -----------------------------------------# Bugzilla37848: only output this ifwe have a TTYif [ $have_tty -eq 1 ]; then
echo "Using CATALINA_BASE: $CATALINA_BASE"
echo "Using CATALINA_HOME: $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
if [ "$1" = "debug" ] ; then
echo "Using JAVA_HOME: $JAVA_HOME"
else
echo "Using JRE_HOME: $JRE_HOME"
fi
echo "Using CLASSPATH: $CLASSPATH"
if [ ! -z "$CATALINA_PID" ]; then
echo "Using CATALINA_PID: $CATALINA_PID"
fi
fi
if [ "$1" = "jpda" ] ; then
if [ -z "$JPDA_TRANSPORT" ]; thenJPDA_TRANSPORT="dt_socket"
fi
if [ -z "$JPDA_ADDRESS" ]; thenJPDA_ADDRESS="8000"
fi
if [ -z "$JPDA_SUSPEND" ]; thenJPDA_SUSPEND="n"
fi
if [ -z "$JPDA_OPTS" ]; thenJPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
fiCATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
shift
fi
if [ "$1" = "debug" ] ; then
if $os400; then
echo "Debug command not available on OS400"exit1
else
shift
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shiftexec"$_RUNJDB" "$LOGGING_CONFIG"$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH"-sourcepath "$CATALINA_HOME"/../../java-Djava.security.manager-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy-Dcatalina.base="$CATALINA_BASE"-Dcatalina.home="$CATALINA_HOME"-Djava.io.tmpdir="$CATALINA_TMPDIR"org.apache.catalina.startup.Bootstrap"$@"startelseexec"$_RUNJDB" "$LOGGING_CONFIG"$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH"-sourcepath "$CATALINA_HOME"/../../java-Dcatalina.base="$CATALINA_BASE"-Dcatalina.home="$CATALINA_HOME"-Djava.io.tmpdir="$CATALINA_TMPDIR"org.apache.catalina.startup.Bootstrap"$@"startfi
fi
elif [ "$1" = "run" ]; then
shift
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shifteval exec"\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\""$LOGGING_MANAGER $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\""org.apache.catalina.startup.Bootstrap"$@"startelseeval exec"\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\""$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\""-Dcatalina.base="\"$CATALINA_BASE\""-Dcatalina.home="\"$CATALINA_HOME\""-Djava.io.tmpdir="\"$CATALINA_TMPDIR\""org.apache.catalina.startup.Bootstrap"$@"startfi
elif [ "$1" = "start" ] ; then
if [ ! -z "$CATALINA_PID" ]; then
if [ -f "$CATALINA_PID" ]; then
if [ -s "$CATALINA_PID" ]; then
echo "Existing PID file found during start."
if [ -r "$CATALINA_PID" ]; thenPID=`cat "$CATALINA_PID"`ps -p $PID >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "Tomcat appears to still be running with PID $PID. Start aborted."exit1
else
echo "Removing/clearing stale PID file."
rm -f "$CATALINA_PID" >/dev/null 2>&1
if [ $? != 0 ]; then
if [ -w "$CATALINA_PID" ]; then
cat /dev/null > "$CATALINA_PID"
else
echo "Unable to remove or clear stale PID file. Start aborted."exit1
fi
fi
fi
else
echo "Unable to read PID file. Start aborted."exit1
fi
else
rm -f "$CATALINA_PID" >/dev/null 2>&1
if [ $? != 0 ]; then
if [ ! -w "$CATALINA_PID" ]; then
echo "Unable to remove or write to empty PID file. Start aborted."exit1
fi
fi
fi
fi
fi
shift#touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shifteval"\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\""$LOGGING_MANAGER $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\""org.apache.catalina.startup.Bootstrap"$@"start>> "$CATALINA_OUT" 2>&1 "&"
elseeval"\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\""$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\""-Dcatalina.base="\"$CATALINA_BASE\""-Dcatalina.home="\"$CATALINA_HOME\""-Djava.io.tmpdir="\"$CATALINA_TMPDIR\""-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintGCTimeStamps-Xloggc:"$CATALINA_BASE"/logs/gc.log org.apache.catalina.startup.Bootstrap"$@" start "2>&1" | /usr/local/sbin/cronolog -S "$CATALINA_BASE"/logs/catalina_ln.out "$CATALINA_BASE"/logs/catalina.%Y-%m-%d-%H.out >> /dev/null &
fi
if [ ! -z "$CATALINA_PID" ]; then
echo $! > "$CATALINA_PID"
fi
echo "Tomcat started."
elif [ "$1" = "stop" ] ; then
shiftSLEEP=5
if [ ! -z "$1" ]; then
echo $1 | grep "[^0-9]" >/dev/null 2>&1
if [ $? -gt 0 ]; thenSLEEP=$1
shift
fi
fiFORCE=1
if [ "$1" = "-force" ]; then
shiftFORCE=1
fi
if [ ! -z "$CATALINA_PID" ]; then
if [ -f "$CATALINA_PID" ]; then
if [ -s "$CATALINA_PID" ]; then
kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
if [ $? -gt 0 ]; then
echo "PID file found but no matching process was found. Stop aborted."exit1
fi
else
echo "PID file is empty and has been ignored."
fi
else
echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."exit1
fi
fieval"\"$_RUNJAVA\""$LOGGING_MANAGER $JAVA_OPTS-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\""-Dcatalina.base="\"$CATALINA_BASE\""-Dcatalina.home="\"$CATALINA_HOME\""-Djava.io.tmpdir="\"$CATALINA_TMPDIR\""org.apache.catalina.startup.Bootstrap"$@"stop
# stop failed. Shutdown port disabled? Try a normal kill.if [ $? != 0 ]; then
if [ ! -z "$CATALINA_PID" ]; then
echo "The stop command failed. Attempting to signal the process to stop through OS signal."
kill -15 `cat "$CATALINA_PID"` >/dev/null 2>&1
fi
fi
if [ ! -z "$CATALINA_PID" ]; then
if [ -f "$CATALINA_PID" ]; then
while [ $SLEEP -ge 0 ]; do
kill -9 `cat "$CATALINA_PID"` >/dev/null 2>&1
if [ $? -gt 0 ]; then
rm -f "$CATALINA_PID" >/dev/null 2>&1
if [ $? != 0 ]; then
if [ -w "$CATALINA_PID" ]; then
cat /dev/null > "$CATALINA_PID"# If Tomcat has stopped don‘t try and force a stop with an empty PID file
FORCE=0
else
echo "The PID file could not be removed or cleared."
fi
fi
ps -ef | grep tomcat | grep -v grep | awk ‘{print $2}‘ | sed -e "s/^/kill -9 /g"|sh -
echo "Tomcat stopped."breakfi
if [ $SLEEP -gt 0 ]; then
sleep 1
fi
if [ $SLEEP -eq 0 ]; then
if [ $FORCE -eq 0 ]; then
echo "Tomcat did not stop in time. PID file was not removed. To aid diagnostics a thread dump has been written to standard out."
kill -3 `cat "$CATALINA_PID"`fi
fiSLEEP=`expr $SLEEP - 1`done
fi
fiKILL_SLEEP_INTERVAL=5
if [ $FORCE -eq 1 ]; then
if [ -z "$CATALINA_PID" ]; then
echo "Kill failed: \$CATALINA_PID not set"
else
if [ -f "$CATALINA_PID" ]; thenPID=`cat "$CATALINA_PID"`echo "Killing Tomcat with the PID: $PID"
kill -9$PIDwhile [ $KILL_SLEEP_INTERVAL -ge 0 ]; do
kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
if [ $? -gt 0 ]; then
rm -f "$CATALINA_PID" >/dev/null 2>&1
if [ $? != 0 ]; then
if [ -w "$CATALINA_PID" ]; then
cat /dev/null > "$CATALINA_PID"
else
echo "The PID file could not be removed."
fi
fi# Set this to zeroelsea warning will be issued about the process still running
KILL_SLEEP_INTERVAL=0
echo "The Tomcat process has been killed."breakfi
if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then
sleep 1
fiKILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1`done
if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then
echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."
fi
fi
fi
fi
elif [ "$1" = "configtest" ] ; theneval"\"$_RUNJAVA\""$LOGGING_MANAGER $JAVA_OPTS-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\""-Dcatalina.base="\"$CATALINA_BASE\""-Dcatalina.home="\"$CATALINA_HOME\""-Djava.io.tmpdir="\"$CATALINA_TMPDIR\""org.apache.catalina.startup.Bootstrap configtest
result=$?
if [ $result -ne 0 ]; then
echo "Configuration error detected!"
fiexit $resultelif [ "$1" = "version" ] ; then
"$_RUNJAVA"-classpath "$CATALINA_HOME/lib/catalina.jar"org.apache.catalina.util.ServerInfoelse
echo "Usage: catalina.sh ( commands ... )"
echo "commands:"
if $os400; then
echo "debug Start Catalina in a debugger (not available on OS400)"
echo "debug -security Debug Catalina with a security manager (not available on OS400)"
else
echo "debug Start Catalina in a debugger"
echo "debug -security Debug Catalina with a security manager"
fi
echo "jpda start Start Catalina under JPDA debugger"
echo "run Start Catalina in the current window"
echo "run -security Start in the current window with security manager"
echo "start Start Catalina in a separate window"
echo "start -security Start in a separate window with security manager"
echo "stop Stop Catalina, waiting up to 5 seconds for the process to end"
echo "stop n Stop Catalina, waiting up to n seconds for the process to end"
echo "stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
echo "stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
echo "configtest Run a basic syntax check on server.xml - check exit code for result"
echo "version What version of tomcat are you running?"
echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"exit1
fi