#!/bin/bash # # chkconfig: 2345 90 10 # description: An snmp data collector for the hobbit & BigBrother network # monitoring suites # processname: devmon # pidfile: /run/devmon/devmon.pid # config: /usr/share/devmon/devmon.cfg # source function library . /etc/init.d/functions RETVAL=0 PIDFILE=/run/devmon/devmon.pid KILLDELAY=5 ARGS="" RUNASUSER=devmon [ -e /etc/sysconfig/devmon ] && . /etc/sysconfig/devmon prog="/usr/share/devmon/devmon" if [ -e ~hobbit/client/bin/bbcmd ] then prog="~hobbit/client/bin/bbcmd $prog" elif [ -e ~xymon/client/bin/bbcmd ] then prog="~xymon/client/bin/bbcmd $prog" elif [ -e ~bb/etc/bbdef.sh ] then . ~bb/etc/bbdef.sh fi start() { gprintf "Starting Devmon: " daemon ${RUNASUSER:+--user=$RUNASUSER} $prog "$ARGS" RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/devmon } stop() { gprintf "Stopping Devmon: " # Try killproc with the options we need sending sig 0, if it fails # with a pidof error, we need the internal killproc which # is a copy of the killproc that has the options we need # otherwise we use the killproc we have if killproc -p $PIDFILE -d $KILLDELAY devmon -0 >/dev/null then killproc -p $PIDFILE -d $KILLDELAY devmon else internal_killproc -p $PIDFILE -d $KILLDELAY devmon fi RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/devmon } rotate () { if killproc -p $PIDFILE -d $KILLDELAY devmon -0 >/dev/null then killproc -p $PIDFILE -d $KILLDELAY devmon -HUP >/dev/null else internal_killproc -p $PIDFILE -d $KILLDELAY devmon -HUP >/dev/null fi RETVAL=$? } internal_killproc() { local RC killlevel= base pid pid_file= delay RC=0; delay=3 # Test syntax. if [ "$#" -eq 0 ]; then gprintf "Usage: internal_killproc [-p pidfile] [ -d delay] {program} [-signal]\n" return 1 fi if [ "$1" = "-p" ]; then pid_file=$2 shift 2 fi if [ "$1" = "-d" ]; then delay=$2 shift 2 fi # check for second arg to be kill level [ -n "${2:-}" ] && killlevel=$2 # Save basename. base=${1##*/} # Find pid. __pids_var_run "$1" "$pid_file" if [ -z "$pid_file" -a -z "$pid" ]; then pid="$(__pids_pidof "$1")" fi # Kill it. if [ -n "$pid" ] ; then [ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base " if [ -z "$killlevel" ] ; then if checkpid $pid 2>&1; then # TERM first, then KILL if not dead kill -TERM $pid >/dev/null 2>&1 usleep 100000 if checkpid $pid && sleep 1 && checkpid $pid && sleep $delay && checkpid $pid ; then kill -KILL $pid >/dev/null 2>&1 usleep 100000 fi fi checkpid $pid RC=$? [ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown" RC=$((! $RC)) # use specified level only else if checkpid $pid; then kill $killlevel $pid >/dev/null 2>&1 RC=$? [ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel" elif [ -n "${LSB:-}" ]; then RC=7 # Program is not running fi fi else if [ -n "${LSB:-}" -a -n "$killlevel" ]; then RC=7 # Program is not running else failure $"%s shutdown" "$base" RC=0 fi fi # Remove pid file if any. if [ -z "$killlevel" ]; then rm -f "${pid_file:-/run/devmon/$base.pid}" fi return $RC } case "$1" in start) start RETVAL=$? ;; stop) stop RETVAL=$? ;; restart) stop start RETVAL=$? ;; reload|readbbhosts) sh -c "$prog $ARGS --readbbhosts" RETVAL=$? ;; rotate) if status devmon >/dev/null then rotate fi RETVAL=$? ;; status) status devmon RETVAL=$? ;; *) gprintf "Usage: %s {start|stop|restart|[reload|readbbhosts]|rotate|status}\n" "$0" exit 1 esac exit $RETVAL