270 lines
7.6 KiB
Plaintext
270 lines
7.6 KiB
Plaintext
|
#!/bin/bash
|
||
|
#
|
||
|
# tomcat6 This shell script takes care of starting and stopping Tomcat
|
||
|
#
|
||
|
# chkconfig: - 80 20
|
||
|
#
|
||
|
### BEGIN INIT INFO
|
||
|
# Provides: tomcat6
|
||
|
# Required-Start: $network $syslog
|
||
|
# Required-Stop: $network $syslog
|
||
|
# Default-Start:
|
||
|
# Default-Stop:
|
||
|
# Description: Release implementation for Servlet 2.5 and JSP 2.1
|
||
|
# Short-Description: start and stop tomcat
|
||
|
### END INIT INFO
|
||
|
#
|
||
|
# - originally written by Henri Gomez, Keith Irwin, and Nicolas Mailhot
|
||
|
# - heavily rewritten by Deepak Bhole and Jason Corley
|
||
|
#
|
||
|
|
||
|
# Source function library.
|
||
|
. /etc/rc.d/init.d/functions
|
||
|
|
||
|
NAME="$(basename $0)"
|
||
|
unset ISBOOT
|
||
|
if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then
|
||
|
NAME="${NAME:3}"
|
||
|
ISBOOT="1"
|
||
|
fi
|
||
|
|
||
|
# For SELinux we need to use 'runuser' not 'su'
|
||
|
if [ -x "/sbin/runuser" ]; then
|
||
|
SU="/sbin/runuser"
|
||
|
else
|
||
|
SU="/bin/su"
|
||
|
fi
|
||
|
|
||
|
# Get the tomcat config (use this for environment specific settings)
|
||
|
TOMCAT_CFG="/etc/tomcat6/tomcat6.conf"
|
||
|
if [ -r "$TOMCAT_CFG" ]; then
|
||
|
. $TOMCAT_CFG
|
||
|
fi
|
||
|
|
||
|
# Get instance specific config file
|
||
|
if [ -r "/etc/sysconfig/${NAME}" ]; then
|
||
|
. /etc/sysconfig/${NAME}
|
||
|
fi
|
||
|
|
||
|
# Define which connector port to use
|
||
|
CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"
|
||
|
|
||
|
# Path to the tomcat launch script
|
||
|
TOMCAT_SCRIPT="/usr/sbin/tomcat6"
|
||
|
|
||
|
# Tomcat program name
|
||
|
TOMCAT_PROG="${NAME}"
|
||
|
|
||
|
# Define the tomcat username
|
||
|
TOMCAT_USER="${TOMCAT_USER:-tomcat}"
|
||
|
|
||
|
# Define the tomcat log file
|
||
|
TOMCAT_LOG="${TOMCAT_LOG:-/var/log/tomcat6/catalina.out}"
|
||
|
|
||
|
RETVAL="0"
|
||
|
|
||
|
# Look for open ports, as the function name might imply
|
||
|
function findFreePorts() {
|
||
|
local isSet1="false"
|
||
|
local isSet2="false"
|
||
|
local isSet3="false"
|
||
|
local lower="8000"
|
||
|
randomPort1="0"
|
||
|
randomPort2="0"
|
||
|
randomPort3="0"
|
||
|
local -a listeners="( $(
|
||
|
netstat -ntl | \
|
||
|
awk '/^tcp/ {gsub("(.)*:", "", $4); print $4}'
|
||
|
) )"
|
||
|
while [ "$isSet1" = "false" ] || \
|
||
|
[ "$isSet2" = "false" ] || \
|
||
|
[ "$isSet3" = "false" ]; do
|
||
|
let port="${lower}+${RANDOM:0:4}"
|
||
|
if [ -z `expr " ${listeners[*]} " : ".*\( $port \).*"` ]; then
|
||
|
if [ "$isSet1" = "false" ]; then
|
||
|
export randomPort1="$port"
|
||
|
isSet1="true"
|
||
|
elif [ "$isSet2" = "false" ]; then
|
||
|
export randomPort2="$port"
|
||
|
isSet2="true"
|
||
|
elif [ "$isSet3" = "false" ]; then
|
||
|
export randomPort3="$port"
|
||
|
isSet3="true"
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function makeHomeDir() {
|
||
|
if [ ! -d "$CATALINA_HOME" ]; then
|
||
|
echo "$CATALINA_HOME does not exist, creating"
|
||
|
if [ ! -d "/usr/share/${NAME}" ]; then
|
||
|
mkdir /usr/share/${NAME}
|
||
|
cp -pLR /usr/share/tomcat6/* /usr/share/${NAME}
|
||
|
fi
|
||
|
mkdir -p /var/log/${NAME} \
|
||
|
/var/cache/${NAME} \
|
||
|
/var/tmp/${NAME}
|
||
|
ln -fs /var/cache/${NAME} ${CATALINA_HOME}/work
|
||
|
ln -fs /var/tmp/${NAME} ${CATALINA_HOME}/temp
|
||
|
cp -pLR /usr/share/${NAME}/bin $CATALINA_HOME
|
||
|
cp -pLR /usr/share/${NAME}/conf $CATALINA_HOME
|
||
|
ln -fs /usr/share/java/tomcat6 ${CATALINA_HOME}/lib
|
||
|
ln -fs /usr/share/tomcat6/webapps ${CATALINA_HOME}/webapps
|
||
|
chown ${TOMCAT_USER}:${TOMCAT_USER} /var/log/${NAME}
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function parseOptions() {
|
||
|
options=""
|
||
|
options="$options $(
|
||
|
awk '!/^#/ && !/^$/ { ORS=" "; print "export ", $0, ";" }' \
|
||
|
$TOMCAT_CFG
|
||
|
)"
|
||
|
if [ -r "/etc/sysconfig/${NAME}" ]; then
|
||
|
options="$options $(
|
||
|
awk '!/^#/ && !/^$/ { ORS=" ";
|
||
|
print "export ", $0, ";" }' \
|
||
|
/etc/sysconfig/${NAME}
|
||
|
)"
|
||
|
fi
|
||
|
TOMCAT_SCRIPT="$options ${TOMCAT_SCRIPT}"
|
||
|
}
|
||
|
|
||
|
# See how we were called.
|
||
|
function start() {
|
||
|
echo -n "Starting ${TOMCAT_PROG}: "
|
||
|
if [ -f "/var/lock/subsys/${NAME}" ] ; then
|
||
|
if [ -f "/var/run/${NAME}.pid" ]; then
|
||
|
read kpid < /var/run/${NAME}.pid
|
||
|
if checkpid $kpid 2>&1; then
|
||
|
echo_success
|
||
|
echo
|
||
|
return 0
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
# fix permissions on the log and pid files
|
||
|
export CATALINA_PID="/var/run/${NAME}.pid"
|
||
|
touch $CATALINA_PID
|
||
|
chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID
|
||
|
touch $TOMCAT_LOG
|
||
|
chown ${TOMCAT_USER}:${TOMCAT_USER} $TOMCAT_LOG
|
||
|
if [ "$CATALINA_HOME" != "/usr/share/tomcat6" ]; then
|
||
|
# Create a tomcat directory if it doesn't exist
|
||
|
makeHomeDir
|
||
|
# If CATALINA_HOME doesn't exist modify port number so that
|
||
|
# multiple instances don't interfere with each other
|
||
|
findFreePorts
|
||
|
sed -i -e "s/8005/${randomPort1}/g" -e "s/8080/${CONNECTOR_PORT}/g" \
|
||
|
-e "s/8009/${randomPort2}/g" -e "s/8443/${randomPort3}/g" \
|
||
|
${CATALINA_HOME}/conf/server.xml
|
||
|
fi
|
||
|
parseOptions
|
||
|
if [ "$SECURITY_MANAGER" = "true" ]; then
|
||
|
$SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security" \
|
||
|
>> $TOMCAT_LOG 2>&1
|
||
|
else
|
||
|
$SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start" >> $TOMCAT_LOG 2>&1
|
||
|
fi
|
||
|
RETVAL="$?"
|
||
|
if [ "$RETVAL" -eq 0 ]; then
|
||
|
echo_success
|
||
|
touch /var/lock/subsys/${NAME}
|
||
|
else
|
||
|
echo_failure
|
||
|
fi
|
||
|
echo
|
||
|
return $RETVAL
|
||
|
}
|
||
|
|
||
|
function stop() {
|
||
|
RETVAL="0"
|
||
|
echo -n "Stopping ${TOMCAT_PROG}: "
|
||
|
if [ -f "/var/lock/subsys/${NAME}" ]; then
|
||
|
parseOptions
|
||
|
$SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} stop" >> $TOMCAT_LOG 2>&1
|
||
|
RETVAL="$?"
|
||
|
if [ "$RETVAL" -eq "0" ]; then
|
||
|
count="0"
|
||
|
if [ -f "/var/run/${NAME}.pid" ]; then
|
||
|
read kpid < /var/run/${NAME}.pid
|
||
|
until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] || \
|
||
|
[ "$count" -gt "$SHUTDOWN_WAIT" ]; do
|
||
|
if [ "$SHUTDOWN_VERBOSE" = "true" ]; then
|
||
|
echo "waiting for processes $kpid to exit"
|
||
|
fi
|
||
|
sleep 1
|
||
|
let count="${count}+1"
|
||
|
done
|
||
|
if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then
|
||
|
if [ "$SHUTDOWN_VERBOSE" = "true" ]; then
|
||
|
echo "killing processes which didn't stop after $SHUTDOWN_WAIT seconds"
|
||
|
fi
|
||
|
kill -9 $kpid
|
||
|
fi
|
||
|
echo_success
|
||
|
fi
|
||
|
rm -f /var/lock/subsys/${NAME} /var/run/${NAME}.pid
|
||
|
else
|
||
|
echo_failure
|
||
|
fi
|
||
|
else
|
||
|
echo_success
|
||
|
fi
|
||
|
echo
|
||
|
return $RETVAL
|
||
|
}
|
||
|
|
||
|
# See how we were called.
|
||
|
case "$1" in
|
||
|
start)
|
||
|
start
|
||
|
;;
|
||
|
stop)
|
||
|
stop
|
||
|
;;
|
||
|
restart)
|
||
|
stop
|
||
|
start
|
||
|
;;
|
||
|
condrestart|try-restart)
|
||
|
if [ -f "/var/run/${NAME}.pid" ]; then
|
||
|
stop
|
||
|
start
|
||
|
fi
|
||
|
;;
|
||
|
reload)
|
||
|
RETVAL="3"
|
||
|
;;
|
||
|
force-reload)
|
||
|
if [ -f "/var/run/${NAME}.pid" ]; then
|
||
|
stop
|
||
|
start
|
||
|
fi
|
||
|
;;
|
||
|
status)
|
||
|
if [ -f "/var/run/${NAME}.pid" ]; then
|
||
|
status ${NAME}
|
||
|
RETVAL="$?"
|
||
|
else
|
||
|
pid="$(/usr/bin/pgrep -d , -u tomcat -G tomcat java)"
|
||
|
if [ -z "$pid" ]; then
|
||
|
status ${NAME}
|
||
|
RETVAL="$?"
|
||
|
else
|
||
|
echo "${NAME} (pid $pid) is running..."
|
||
|
RETVAL="0"
|
||
|
fi
|
||
|
fi
|
||
|
;;
|
||
|
version)
|
||
|
${TOMCAT_SCRIPT} version
|
||
|
;;
|
||
|
*)
|
||
|
echo -n "Usage: $0 {start|stop|restart|condrestart|try-restart|reload|force-reload|status|version}"
|
||
|
RETVAL="2"
|
||
|
esac
|
||
|
|
||
|
exit $RETVAL
|