#!/bin/bash ### BEGIN INIT INFO # Provides: httpd-avs # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: AVS # Description: Start/Stop Apache Virtual Servers ### END INIT INFO # # Platform: Ubuntu # update-rc.d: httpd-avs start 15 2 3 4 5 . stop 85 0 1 6 . # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd-avs # Variables AVSDIR=/usr/local/avs HTTPD_AVS=httpd-avs HTTPD_PREFIX="httpd-" APACHECTL=bin/apache2ctl PS="/bin/ps -ef" GREP=/bin/grep KILL="/bin/kill -9" AWK=/usr/bin/awk LOGGER=/usr/bin/logger RM=/bin/rm # Functions # Start all servers START () { # Disable regular apache /usr/sbin/service apache2 stop /usr/sbin/update-rc.d -f apache2 remove cd $AVSDIR for SITE in ${HTTPD_PREFIX}*; do echo "Starting $SITE..." $SITE/$APACHECTL start sleep 1 # Check results $PS|$GREP -v $GREP|$GREP -q $SITE # Log failures to the syslog if [ ! "$?" = "0" ]; then echo "Instance $SITE failed to start." $LOGGER -p local4.info "WARNING: httpd instance $SITE failed to start." else echo "Instance $SITE started." fi done } # Stop all servers STOP () { cd $AVSDIR for SITE in ${HTTPD_PREFIX}*; do echo "Stopping $SITE..." $SITE/$APACHECTL stop if [ "$?" = "0" ]; then echo "Instance $SITE stopped." else echo "Instance $SITE failed to stop." fi done # Check results echo "Checking for hung httpd processes..." sleep 5 $PS|$GREP -v $GREP|$GREP -v $HTTPD_AVS|$GREP -q httpd # If there are hung httpd processes, kill them if [ "$?" = "0" ]; then echo "Some httpd processes not stopping; killing them..." for PROCESS in "`$PS|$GREP -v $GREP|$GREP -v $HTTPD_AVS|$GREP httpd|$AWK '{print $2}'`"; do $KILL $PROCESS done fi # Do a final check; log information to syslog either way $PS|$GREP -v $GREP|$GREP -v $HTTPD_AVS|$GREP -q httpd if [ "$?" = "0" ]; then echo "Failed to kill all httpd instances." $LOGGER -p local4.info "NOTICE: Failed to kill all httpd instances." exit 1 fi echo "All httpd instances stopped." $LOGGER -p local4.info "All httpd instances stopped." } # Script case "$1" in start) START ;; stop) STOP ;; restart) STOP START ;; *) echo "Usage: $0 [stop|start|restart]" ;; esac