#!/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 }