# # /usr/sbin/rctomcat5 # # System startup script for the Tomcat servlet container # ### BEGIN INIT INFO # Provides: tomcat # Required-Start: $local_fs $remote_fs apache2 # X-UnitedLinux-Should-Start: $named $syslog $time # Required-Stop: $local_fs $remote_fs # X-UnitedLinux-Should-Stop: $named $syslog $time # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: Tomcat Servlet Container # Description: Start Tomcat to allow JAVA server pages ### END INIT INFO tomcatIsRunning() { tomcat_ps_log=`mktemp /var/tmp/tomcat-ps.log.XXXXXX` ps aux --cols 1024 >"$tomcat_ps_log" tomcat_is_running="false" if grep " -Dcatalina.base=$CATALINA_BASE.*-Dcatalina.home=$CATALINA_HOME.*org.apache.catalina.startup.Bootstrap" "$tomcat_ps_log" >/dev/null 2>/dev/null ; then tomcat_is_running="true" fi rm -f "$tomcat_ps_log" test "$tomcat_is_running" = "true" } # Check for missing binaries and configuration # Note: Special treatment of stop for LSB conformance TOMCAT_CONFIG=/etc/sysconfig/j2ee test -r "$TOMCAT_CONFIG" || { echo "$TOMCAT_CONFIG not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; } # Read config . "$TOMCAT_CONFIG" #CATALINA_HOME="$CATALINA_HOME_4" #CATALINA_BASE="$CATALINA_BASE_4" # defaults CATALINA_BASE to CATALINA_HOME test -n "$CATALINA_BASE" || CATALINA_BASE="$CATALINA_HOME" test -x "$CATALINA_HOME/bin/startup.sh" || { echo "$CATALINA_HOME/bin/startup.sh not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } test -x "$CATALINA_HOME/bin/shutdown.sh" || { echo "$CATALINA_HOME/bin/shutdown.sh not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } # is the BASE valid? test -d "$CATALINA_BASE/webapps" || test -L "$CATALINA_BASE/webapps" || { echo "$CATALINA_BASE/webapps not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; } # the following variables affects the server export CATALINA_HOME CATALINA_BASE # Shell functions sourced from /etc/rc.status: # rc_check check and set local and overall rc status # rc_status check and set local and overall rc status # rc_status -v ditto but be verbose in local rc status # rc_status -v -r ditto and clear the local rc status # rc_failed set local and overall rc status to failed # rc_failed set local and overall rc status to # rc_reset clear local rc status (overall remains) # rc_exit exit appropriate to overall rc status . /etc/rc.status # First reset status of this service rc_reset # Return values acc. to LSB for all commands but status: # 0 - success # 1 - generic or unspecified error # 2 - invalid or excess argument(s) # 3 - unimplemented feature (e.g. "reload") # 4 - insufficient privilege # 5 - program is not installed # 6 - program is not configured # 7 - program is not running # # Note that starting an already running service, stopping # or restarting a not-running service as well as the restart # with force-reload (in case signalling is not supported) are # considered a success. case "$1" in start) echo -n "Starting Tomcat ($CATALINA_BASE)" ## Start daemon with startproc(8). If this fails ## the echo return value is set appropriate. # NOTE: startproc return 0, even if service is # already running to match LSB spec. if tomcatIsRunning ; then rc_failed 0 else # try to fix permissions chown --dereference tomcat:tomcat "$CATALINA_BASE" for dir in "$CATALINA_BASE/conf" \ "$CATALINA_BASE/logs" \ "$CATALINA_BASE/temp" \ "$CATALINA_BASE/webapps" \ "$CATALINA_BASE/work" ; do # the command true is used because of for example conf directory may be mounted read-only test -d "$dir" && chown -R --dereference tomcat:tomcat "$dir" 2>/dev/null || true done su tomcat -s /bin/bash -c "$CATALINA_HOME/bin/startup.sh" >"$CATALINA_BASE/logs//start.log" 2>&1 sleep 1 if tomcatIsRunning ; then rc_failed 0 else rc_failed 7 fi fi rc_status -v ;; stop) echo -n "Shutting down Tomcat ($CATALINA_BASE)" ## Stop daemon with killproc(8) and if this fails ## set echo the echo return value. if tomcatIsRunning ; then su tomcat -s /bin/bash -c "$CATALINA_HOME/bin/shutdown.sh" >"$CATALINA_BASE/logs/stop.log" 2>&1 # wait 60 sec for stop at maximum wait_sec=60 while [ "$wait_sec" != "0" ] ; do sleep 1 if ! tomcatIsRunning ; then # theTomcat server is stoped, end the loop wait_sec=0 break fi wait_sec=$((wait_sec -1)) done # check the final status if tomcatIsRunning ; then rc_failed 1 else rc_failed 0 fi else rc_failed 0 fi # Remember status and be verbose rc_status -v ;; try-restart) ## Stop the service and if this succeeds (i.e. the ## service was running before), start it again. ## Note: try-restart is not (yet) part of LSB (as of 0.7.5) $0 status >/dev/null && $0 restart # Remember status and be quiet rc_status ;; restart) ## Stop the service and regardless of whether it was ## running or not, start it again. $0 stop $0 start # Remember status and be quiet rc_status ;; force-reload) ## Signal the daemon to reload its config. Most daemons ## do this on signal 1 (SIGHUP). ## If it does not support it, restart. echo -n "Reload service Tomcat $($CATALINA_BASE)" ## if it supports it: #killproc -HUP $TOMCAT_BIN #touch /var/run/FOO.pid #rc_status -v ## Otherwise: $0 stop && $0 start rc_status ;; reload) ## Like force-reload, but if daemon does not support ## signalling, do nothing (!) # If it supports signalling: #echo -n "Reload service FOO" #killproc -HUP $TOMCAT_BIN #touch /var/run/FOO.pid #rc_status -v ## Otherwise if it does not support reload: rc_failed 3 rc_status -v ;; status) echo -n "Checking for Tomcat ($CATALINA_BASE)" ## Check status with checkproc(8), if process is running ## checkproc will return with exit status 0. # Status has a slightly different for the status command: # 0 - service running # 1 - service dead, but /var/run/ pid file exists # 2 - service dead, but /var/lock/ lock file exists # 3 - service not running # NOTE: checkproc returns LSB compliant status values. if tomcatIsRunning ; then rc_failed 0 else rc_failed 3 fi rc_status -v ;; probe) ## Optional: Probe for the necessity of a reload, ## give out the argument which is required for a reload. ;; *) echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}" exit 1 ;; esac rc_exit