--- /dev/null
+#!/bin/bash
+#
+# An attempt at a simple, distribution-independent daemon management.
+#
+# Copyright (C) 2000-2001 Mission Critical Linux, Inc.
+#
+
+# daemon functions
+getpid()
+{
+ pid=''
+ if [ -f /var/run/${base}.pid ]
+ then
+ pid=`head -1 /var/run/${base}.pid`
+ fi
+ if [ "$pid" = "" ]
+ then
+ pid=`pidof $1`
+ fi
+ if [ "$pid" = "" ]
+ then
+ pid=`ps ax | awk 'BEGIN { prog=ARGV[1]; ARGC=1 }
+ { if ((prog == $5) || (("(" prog ")") == $5) ||
+ (("[" prog "]") == $5) ||
+ ((prog ":") == $5)) { print $1 ; exit 0 } }' $1`
+ fi
+
+ echo $pid
+}
+
+startdaemon()
+{
+ base=`basename $1`
+
+ # check if it is already running
+ pid=`getpid $base`
+ [ -n "$pid" ] && ps h $pid >/dev/null 2>&1 && echo " already running." && return
+
+ # don't dump core
+ ulimit -c 0
+
+ $* && echo " done." || echo " failed."
+}
+
+stopdaemon()
+{
+ base=`basename $1`
+ pid=`getpid $base`
+
+ if [ "$pid" != "" ]
+ then
+ if ps h $pid>/dev/null 2>&1
+ then
+ kill -TERM $pid
+ if ps h $pid>/dev/null 2>&1
+ then
+ sleep 1
+ if ps h $pid>/dev/null 2>&1
+ then
+ sleep 3
+ if ps h $pid>/dev/null 2>&1
+ then
+ kill -KILL $pid
+ sleep 2
+ fi
+ fi
+ fi
+ fi
+ ps h $pid >/dev/null 2>&1
+ RC=$?
+ [ $RC -eq 0 ] && echo " failed." || echo " done."
+ [ $RC -eq 0 ] || rm -f /var/run/$base.pid >/dev/null 2>&1
+ else
+ echo " not running."
+ fi
+}
+
+daemonstatus()
+{
+ base=`basename $1`
+ pid=`getpid $base`
+
+ if [ "$pid" != "" ]
+ then
+ if ps h $pid >/dev/null 2>&1
+ then
+ echo "$base (pid $pid) is running."
+ return 0
+ else
+ if [ -f /var/run/${base}.pid ]
+ then
+ echo "$base dead but pid file exists."
+ return 1
+ else
+ echo "$base is stopped."
+ return 2
+ fi
+ fi
+ else
+ echo "$base is stopped."
+ return 3
+ fi
+}
+