#!/bin/sh
#
# Yet Another Attempt (YAA) at robustly stopping Apache.  Fun facts:
#    - graceful-stop not supported in all versions of Apache 2.2+.
#    - graceful-stop complains about pid in pidfile not running but exits 0
#    - Worker MPM child processes take longer to exit than parent.
#
# Usage:
#     stop_apache.sh apachectl_program pid_file httpd_program stop_command port

set -u

if [ $# != 5 ]; then
  echo Usage: $0 apachectl_program pid_file httpd_program stop_command port
  exit 1
fi

apachectl="$1"
pid_file="$2"
httpd="$(basename $3)"
stop_command="$4"
port="$5"
first=1

$apachectl $stop_command
# Sadly, httpd often misses the memo the first time, so
# we must keep kicking it until it complies.
while [ -f $pid_file ]; do
  if [ $first -eq 1 ]; then
    echo Checking pid file $pid_file ...
    first=0
  else
    sleep 1
  fi

  # '$stop_command' exits with 0 status even if the pid is not
  # running, so we must capture that.
  $apachectl $stop_command | fgrep -q "not running"
  if [ $? -eq 0 ]; then
    rm -f $pid_file
  fi

  # Note: If the above strategy doesn't work out in practice, another
  # approach is to check for the PID being active, e.g.
  #  if ! (ps -p $LOCK_PID | grep -q $LOCK_PID); then
  #    echo "Removing stale lock. Process PID=$LOCK_PID, no longer exists."
  #    rm $LOCKFILE
done

# Even worse with 2.2 worker we have to wait for processes to exit too.
first=1
iter=0
while [ "$(pgrep $httpd|wc -l|awk '{print $1}')" -gt 0 ]; do
  if [ $first -eq 1 ]; then
    /bin/echo -n "Waiting for $httpd to exit"
    first=0
  else
    /bin/echo -n "."
    iter=$(($iter + 1))
  fi
  if [ $iter -ge 30 ]; then # Run for 30 seconds, if not dead, just kill apache.
    killall -9 $httpd
  fi
  sleep 1
done

if [ $(netstat -anp 2>&1 | grep -c "::$port .*valgrind.bin") -ne 0 ]; then
  /bin/echo "Valgrind still running, killing it."
  killall memcheck-amd64-
fi

first=1
while [ $(netstat -anp 2>&1 | grep -c "::$port .* LISTEN ") -ne 0 ]; do
  if [ $first -eq 1 ]; then
    /bin/echo -n "Waiting for netstat to stop including refs to port $port"
    first=0
  else
    /bin/echo -n "."
  fi
  sleep 1
done

/bin/echo
