debian packages!
[freeside.git] / debian / init.d.ex
index 5791049..2480f51 100644 (file)
 #              This file should be used to construct scripts for /etc/init.d.
 #
 #              Written by Miquel van Smoorenburg <miquels@cistron.nl>.
-#              Modified for Debian GNU/Linux
+#              Modified for Debian 
 #              by Ian Murdock <imurdock@gnu.ai.mit.edu>.
+#               Further changes by Javier Fernandez-Sanguino <jfs@debian.org>
 #
-# 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