#!/bin/sh # # Startup script for Tomcat 5.0, the Apache Servlet Engine # # chkconfig: - 80 20 # description: Tomcat 5.0 is the Apache Servlet Engine RI for Servlet 2.4/JSP 2.0 # processname: tomcat # pidfile: /var/run/tomcat5.pid # config: /usr/local/tomcat/conf/tomcat5.conf # # Gomez Henri # Keith Irwin # Nicolas Mailhot # # version 1.02 - Removed initlog support # version 1.03 - Removed config: # version 1.04 - tomcat will start before httpd and stop after httpd # version 1.05 - jdk hardcoded to link /usr/java/jdk and tomcat runs as "nobody" # version 1.06 - split up into script and config file # version 1.07 - Rework from Nicolas ideas # version 1.08 - Fix work dir permission at start time, switch to use tomcat4 # version 1.09 - Fix pidfile and config tags # version 1.10 - Fallback to su direct use on systems without Redhat/Mandrake init.d functions # version 1.11 - Fix webapps dir permissions # version 1.12 - remove initial start/stop level for chkconfig (- 80 20) # version 1.13 - remove chown of logs/work/temp/webapps dir, owned by tomcat4 at install time # version 1.14 - correct the start/stop ugly hack by waiting all the threads stops # version 1.15 - ensure we're looking for TOMCAT_USER running catalina # version 1.16 - Add support for CATALINA_PID env var # version 1.17 - Remove run files only tomcat started correctl # in start area, check that tomcat is not allready running # version 1.18 - Fix kill typo (thanks Kaj J. Niemi) # version 1.19 - Add jar relinking # version 1.20 - Check there is no stalling tomcat4.pid # version 1.20tc5 - Changed all instances of tomcat4 to tomcat5 except TOMCAT_USER # # Source function library. if [ -x /etc/rc.d/init.d/functions ]; then . /etc/rc.d/init.d/functions fi # Get Tomcat config # PID_FILE - must match CATALINA_PID in the /bin/setenv.sh file!! PID_FILE=/usr/local/tomcat/bin/startstop.pid # Path to the tomcat launch script (direct don't use wrapper) TOMCAT_SCRIPT=/usr/local/tomcat/bin/catalina.sh # Tomcat name :) TOMCAT_PROG=tomcat # SYSTEM lock file SYSTEM_LOCK_FILE=/usr/local/tomcat/bin/startstop.lock # How long to wait for shutdowns SHUTDOWN_WAIT=15 # if TOMCAT_USER is not set, use tomcat like Apache HTTP server if [ -z "$TOMCAT_USER" ]; then TOMCAT_USER="tomcat" fi # Since the daemon function will sandbox $tomcat # no environment stuff should be defined here anymore. # Please use the /etc/tomcat.conf file instead ; it will # be read by the $tomcat script RETVAL=0 # See how we were called. start() { echo -n "Starting $TOMCAT_PROG: " if [ -f $SYSTEM_LOCK_FILE ] ; then if [ -f $PID_FILE ]; then read kpid < $PID_FILE if checkpid $kpid 2>&1; then echo "process allready running" return -1 else echo "lock file found but no process running for pid $kpid, continuing" fi fi fi export CATALINA_PID=$PID_FILE touch $CATALINA_PID chown $TOMCAT_USER:$TOMCAT_USER $CATALINA_PID if [ -x /etc/rc.d/init.d/functions ]; then daemon --user $TOMCAT_USER $TOMCAT_SCRIPT start else su - $TOMCAT_USER -c "$TOMCAT_SCRIPT start" fi RETVAL=$? echo [ $RETVAL = 0 ] && touch $SYSTEM_LOCK_FILE return $RETVAL } stop() { echo -n "Stopping $TOMCAT_PROG: " if [ -f $SYSTEM_LOCK_FILE ] ; then if [ -x /etc/rc.d/init.d/functions ]; then daemon --user $TOMCAT_USER $TOMCAT_SCRIPT stop else su - $TOMCAT_USER -c "$TOMCAT_SCRIPT stop" fi RETVAL=$? if [ $RETVAL = 0 ]; then count=0; if [ -f $PID_FILE ]; then read kpid < $PID_FILE let kwait=$SHUTDOWN_WAIT until [ `ps --pid $kpid | grep -c $kpid` = '0' ] || [ $count -gt $kwait ] do echo "waiting for processes to exit"; sleep 1 let count=$count+1; done if [ $count -gt $kwait ]; then echo "killing processes which didn't stop after $SHUTDOWN_WAIT seconds" kill -9 $kpid fi fi rm -f $SYSTEM_LOCK_FILE $PID_FILE fi fi } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop sleep 2 start ;; condrestart) if [ -f $PID_FILE ] ; then stop start fi ;; *) echo "Usage: $TOMCAT_PROG {start|stop|restart|condrestart}" exit 1 esac exit $RETVAL