X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=debian%2Finit.d.ex;h=2480f515dda308180da5ea8330b01d04b42c2012;hp=57910493a1a3cce216b40e4899adf84692b29cf2;hb=207515697bfcc93b03227ea0b581b15cf89b1fbc;hpb=6626dc2a13c809092aa539c5a72bc72a0c56afdc diff --git a/debian/init.d.ex b/debian/init.d.ex index 57910493a..2480f515d 100644 --- a/debian/init.d.ex +++ b/debian/init.d.ex @@ -4,35 +4,106 @@ # This file should be used to construct scripts for /etc/init.d. # # Written by Miquel van Smoorenburg . -# Modified for Debian GNU/Linux +# Modified for Debian # by Ian Murdock . +# Further changes by Javier Fernandez-Sanguino # -# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl +# Version: @(#)skeleton 1.9 26-Feb-2001 miquels@cistron.nl # -# This file was automatically customized by dh-make on Thu, 12 Apr 2001 15:49:17 -0700 -PATH=/sbin:/bin:/usr/sbin:/usr/bin +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/freeside NAME=freeside DESC=freeside -test -f $DAEMON || exit 0 +test -x $DAEMON || exit 0 + +LOGDIR=/var/log/freeside +PIDFILE=/var/run/$NAME.pid +DODTIME=1 # 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 freeside defaults if available +if [ -f /etc/default/freeside ] ; then + . /etc/default/freeside +fi 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 + cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` + # Is this the expected child? + [ "$cmd" != "$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 $NAME || 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 +} + case "$1" in start) echo -n "Starting $DESC: " - start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ - --exec $DAEMON - echo "$NAME." + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --exec $DAEMON -- $DAEMON_OPTS + if running then + echo "$NAME." + else + echo " ERROR." + fi ;; stop) echo -n "Stopping $DESC: " - start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ --exec $DAEMON 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 @@ -45,24 +116,40 @@ case "$1" in # start-stop-daemon --stop --signal 1 --quiet --pidfile \ # /var/run/$NAME.pid --exec $DAEMON #;; - restart|force-reload) + 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". - # - echo -n "Restarting $DESC: " + # 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 \ + /var/run/$NAME.pid --exec $DAEMON \ + && $0 restart \ + || exit 0 + ;; + restart) + echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON - sleep 1 + [ -n "$DODTIME" ] && sleep $DODTIME start-stop-daemon --start --quiet --pidfile \ - /var/run/$NAME.pid --exec $DAEMON + /var/run/$NAME.pid --exec $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}" >&2 + echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2 exit 1 ;; esac