#!/bin/sh
# /etc/rc.d/init.d/supervise
#
# chkconfig: 345 56 50
# description: supervise replaces traditional xinetd or inetd.
#
# processname: /usr/bin/svscan
# pidfile: /var/run/supervise.pid

# Source function library.
if [ -f /etc/init.d/functions ]; then
  . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ]; then
  . /etc/rc.d/init.d/functions
fi

[[ -d /service ]] || { gprintf "/service doesn't exist!\n"; exit 1; }

prog="supervise"

PATH=/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin
export PATH

start() {
  [[ -e /var/run/supervise.pid ]] && { gprintf "supervise is already running\n"; exit 1; }

  gprintf "Starting %s..." "$prog"
  cd /service
  for svc in *
  do
    gprintf "%s..." "$svc"
  done
  env - PATH="$PATH" /usr/bin/svscan /service &
  echo $! > /var/run/supervise.pid
  RETVAL=$?
  echo
  touch /var/lock/subsys/supervise
  return $RETVAL
}

stop() {
  [[ -e /var/run/supervise.pid ]] || { gprintf "supervise is not running\n"; exit 1; }

  gprintf "Stopping %s... " "$prog"
  cd /service
  for svc in *
  do
    test -d $svc/log && svok $svc/log && svc -dx $svc/log
    svok $svc && svc -dx $svc
    gprintf "%s... " "$svc"
  done
  kill `cat /var/run/supervise.pid`
  rm -f /var/run/supervise.pid;
  rm -f /var/lock/subsys/supervise
  echo
  return 0
}

restart() {
  stop
  start
}

condrestart() {
  [ -z "$DURING_INSTALL" ] && [ -e /var/lock/subsys/supervise] && restart
  return 0
}

status() {
  cd /service
  svstat * */log
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  restart)
    restart
    ;;
  condrestart)
    condrestart
    ;;
  *)
    gprintf "Usage: %s {start|stop|restart|condrestart}\n" "$0"
    RETVAL=1
    ;;
esac

exit $RETVAL
