Blame SOURCES/tomcat-7.0.init

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