- #!/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