#!/bin/bash
#
#
# rc file for starting tomcat
#
# On most distributions, this file may be called:
# /etc/rc.d/init.d/tomcat or /etc/init.d/tomcat
#
# For Redhat-ish systems
#
# chkconfig: 345 99 99
# processname: jsvc
# config: /etc/sysconfig/tomcat
# description: starts tomcat server 

if (( `/usr/bin/id -u` != 0 )); then
{ echo "Sorry, must be root.  Exiting...";
exit; }
fi

SYSCONFIG=`basename $0|sed -e 's/^[SK][[:digit:]][[:digit:]]//'`



# Source RedHat function library.
. /etc/init.d/functions


# Source Variables
if [ -r /etc/sysconfig/${SYSCONFIG} ] ; then
       . /etc/sysconfig/${SYSCONFIG}

else

   echo "/etc/sysconfig/${SYSCONFIG} doesn't exist"
   echo 
   echo "The following variables need to be set in /etc/sysconfig/${SYSCONFIG}"
   echo
   echo " CATALINA_HOME=`pwd`"
   echo " SERVER_IP=\"0.0.0.0\""
   echo " JAVA_HOME=\"/usr/java/latest\""
   echo " JAVA_OPTS=\"-Xms128m -Xmx512m\"" 
   echo " TOMCAT_WORKER=`hostname`" 
   echo " RUN_AS=`whoami`"

   exit

fi

PID_FILE=/var/run/tomcat/${SYSCONFIG}.pid

unset DISPLAY

tomcat_start () {
        if [ -e $PID_FILE ] ; then
          echo -n "Tomcat is already running... Please stop it first"
          failure
          echo
          exit 1
       fi

       echo -n "Cleaning up tmp and work directories"
       rm -Rf ${CATALINA_HOME}/work/* ${CATALINA_HOME}/temp/*
       success
       echo
       echo -n "Starting Tomcat on ${SERVER_IP} :"

       export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CATALINA_HOME}/bin/lib:${CATALINA_HOME}/bin

       ${CATALINA_HOME}/bin/jsvc -user ${RUN_AS} -home ${JAVA_HOME} -jvm server ${JAVA_OPTS} ${CATALINA_OPTS} -Dtomcat.bind.address="${SERVER_IP}" -Dtomcat.worker.name="${TOMCAT_WORKER}" -Djava.net.preferIPv4Stack=true -cp ${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar -Dcatalina.home=${CATALINA_HOME} -outfile ${STDLOG} -errfile ${ERRLOG} -pidfile ${PID_FILE} org.apache.catalina.startup.Bootstrap

       chmod 644 ${STDLOG}
       chown ${RUN_AS}  ${STDLOG}
       chmod 644 ${STDLOG}
       chown ${RUN_AS}  ${ERRLOG}
       success
       echo
       echo

       RETVAL=0
}

tomcat_start_verbose ()  {
        if [ -e $PID_FILE ] ; then
          echo -n "Tomcat is already running... Please stop it first"
          failure
          echo
          exit 1
       fi

       echo -n "Cleaning up tmp and work directories"
       rm -Rf ${CATALINA_HOME}/work/* ${CATALINA_HOME}/temp/*
       success
       echo
       echo -n "Starting Tomcat on ${SERVER_IP} :"

       export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CATALINA_HOME}/bin/lib

       ${CATALINA_HOME}/bin/jsvc -user ${RUN_AS} -home ${JAVA_HOME} -jvm server -debug ${JAVA_OPTS} ${CATALINA_OPTS} -Dtomcat.bind.address="${SERVER_IP}" -Dtomcat.worker.name="${TOMCAT_WORKER}" -Djava.net.preferIPv4Stack=true -cp ${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar  -Dcatalina.home=${CATALINA_HOME} -pidfile ${PID_FILE} org.apache.catalina.startup.Bootstrap

       success
       echo
       echo

       RETVAL=0
}


tomcat_stop () {
       echo -n "Shutting down Tomcat on ${SERVER_IP} :"

       ${CATALINA_HOME}/bin/jsvc -stop -pidfile ${PID_FILE}  org.apache.catalina.startup.Bootstrap

       success

       i=0
        while [ -e ${PID_FILE} ] ; do
       let "i++"
       sleep 1
       # If Tomcat doesn't shutdown in 60 seconds we may need to force it.
        if [ $i -gt 60 ] ; then

       failure
            echo -n "Forcing a Shutdown..."
               kill -9 `cat ${PID_FILE}`
               # If we had to force a kill we have to delete the pid file
               rm ${PID_FILE}
        success
       echo
       exit 1
         fi
        done

       echo
       echo

       RETVAL=0
}

tomcat_status () {
        
     if [  -e $PID_FILE ] ; then
         echo "Tomcat is currently running. PID is `cat $PID_FILE`" 
     else
          echo "Tomcat is not running."
          exit 0
    
     fi
       

       RETVAL=0
}


case $1 in

start) 
tomcat_start

;;

stop)
tomcat_stop
;;

restart)
tomcat_stop
tomcat_start

;;

debug)

tomcat_start_verbose 
;;
status)
tomcat_status
;;

version)

${JAVA_HOME}/bin/java -classpath "${CATALINA_HOME}/lib/catalina.jar"  org.apache.catalina.util.ServerInfo


;;

*)
echo "Usage: $0 {start|stop|restart|status|debug|version}"
      exit 1;;
esac

exit 0

