#! /bin/sh

#

# Downloaded from:

# http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/supervisor/trusty/view/head:/debian/supervisor.init

#

# skeleton	example file to build /etc/init.d/ scripts.

#		This file should be used to construct scripts for /etc/init.d.

#

#		Written by Miquel van Smoorenburg <miquels@cistron.nl>.

#		Modified for Debian

#		by Ian Murdock <imurdock@gnu.ai.mit.edu>.

#               Further changes by Javier Fernandez-Sanguino <jfs@debian.org>

#               Modified by sbilly <superli.1980@gmail.com> Added supervisorctl to status

#

# Version:	@(#)skeleton  1.9  26-Feb-2001  miquels@cistron.nl

#

### BEGIN INIT INFO

# Provides:          supervisor

# Required-Start:    $remote_fs $network $named

# Required-Stop:     $remote_fs $network $named

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: Start/stop supervisor

# Description:       Start/stop supervisor daemon and its configured

#                    subprocesses.

### END INIT INFO

. /lib/lsb/init-functions

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

DAEMON=/usr/bin/supervisord

SUPERVISORCTL=/usr/bin/supervisorctl

NAME=supervisord

DESC=supervisor

test -x $DAEMON || exit 0

LOGDIR=/var/log/supervisor

PIDFILE=/var/run/$NAME.pid

DODTIME=5                   # Time to wait for the server to die, in seconds

                            # If this value is set too low you might not

                            # let some servers to die gracefully and

                            # 'restart' will not work

# Include supervisor defaults if available

if [ -f /etc/default/supervisor ] ; then

	. /etc/default/supervisor

fi

DAEMON_OPTS="-c /etc/supervisor/supervisord.conf $DAEMON_OPTS"

set -e

running_pid()

{

    # Check if a given process pid's cmdline matches a given name

    pid=$1

    name=$2

    [ -z "$pid" ] && return 1

    [ ! -d /proc/$pid ] &&  return 1

    (cat /proc/$pid/cmdline | tr "\000" "\n"|grep -q $name) || return 1

    return 0

}

running()

{

# Check if the process is running looking at /proc

# (works for all users)

    # No pidfile, probably no daemon present

    [ ! -f "$PIDFILE" ] && return 1

    # Obtain the pid and check it against the binary name

    pid=`cat $PIDFILE`

    running_pid $pid $DAEMON || return 1

    return 0

}

force_stop() {

# Forcefully kill the process

    [ ! -f "$PIDFILE" ] && return

    if running ; then

        kill -15 $pid

        # Is it really dead?

        [ -n "$DODTIME" ] && sleep "$DODTIME"s

        if running ; then

            kill -9 $pid

            [ -n "$DODTIME" ] && sleep "$DODTIME"s

            if running ; then

                echo "Cannot kill $NAME (pid=$pid)!"

                exit 1

            fi

        fi

    fi

    rm -f $PIDFILE

    return 0

}

case "$1" in

  start)

	echo -n "Starting $DESC: "

	start-stop-daemon --start --quiet --pidfile $PIDFILE \

		--startas $DAEMON -- $DAEMON_OPTS

	test -f $PIDFILE || sleep 1

        if running ; then

            echo "$NAME."

        else

            echo " ERROR."

        fi

	;;

  stop)

	echo -n "Stopping $DESC: "

	start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE

	echo "$NAME."

	;;

  force-stop)

	echo -n "Forcefully stopping $DESC: "

        force_stop

        if ! running ; then

            echo "$NAME."

        else

            echo " ERROR."

        fi

	;;

  #reload)

	#

	#	If the daemon can reload its config files on the fly

	#	for example by sending it SIGHUP, do it here.

	#

	#	If the daemon responds to changes in its config file

	#	directly anyway, make this a do-nothing entry.

	#

	# echo "Reloading $DESC configuration files."

	# start-stop-daemon --stop --signal 1 --quiet --pidfile \

	#	/var/run/$NAME.pid --exec $DAEMON

  #;;

  force-reload)

	#

	#	If the "reload" option is implemented, move the "force-reload"

	#	option to the "reload" entry above. If not, "force-reload" is

	#	just the same as "restart" except that it does nothing if the

	#   daemon isn't already running.

	# check wether $DAEMON is running. If so, restart

	start-stop-daemon --stop --test --quiet --pidfile $PIDFILE \

        --startas $DAEMON \

	&& $0 restart \

	|| exit 0

	;;

  restart)

    echo -n "Restarting $DESC: "

    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE

	[ -n "$DODTIME" ] && sleep $DODTIME

	start-stop-daemon --start --quiet --pidfile $PIDFILE \

		--startas $DAEMON -- $DAEMON_OPTS

	echo "$NAME."

	;;

  status)

    echo -n "$NAME is "

    if running ;  then

        echo "running"

    else

        echo " not running."

        exit 1

    fi

    $SUPERVISORCTL $DAEMON_OPTS status

    ;;

  *)

	N=/etc/init.d/$NAME

	# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2

	echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2

	exit 1

	;;

esac

exit 0