177 lines
4.5 KiB
Plaintext
177 lines
4.5 KiB
Plaintext
|
#! /bin/sh
|
||
|
#
|
||
|
# 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>
|
||
|
#
|
||
|
# 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
|
||
|
NAME=supervisord
|
||
|
DESC=supervisor
|
||
|
|
||
|
test -x $DAEMON || exit 0
|
||
|
|
||
|
LOGDIR=/var/log/supervisor
|
||
|
PIDFILE=/var/run/$NAME.pid
|
||
|
PS_COUNT=0
|
||
|
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 $LABEL (pid=$pid)!"
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
rm -f $PIDFILE
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
get_pid() {
|
||
|
PS_COUNT=$(pgrep -fc $DAEMON || true)
|
||
|
}
|
||
|
|
||
|
case "$1" in
|
||
|
start)
|
||
|
get_pid
|
||
|
if [ $PS_COUNT -eq 0 ]; then
|
||
|
rm -f "$PIDFILE"
|
||
|
fi
|
||
|
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 "$LABEL is "
|
||
|
if running ; then
|
||
|
echo "running"
|
||
|
else
|
||
|
echo " not running."
|
||
|
exit 1
|
||
|
fi
|
||
|
;;
|
||
|
*)
|
||
|
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
|