diff options
Diffstat (limited to 'local/snmp-ucd.sh')
-rwxr-xr-x | local/snmp-ucd.sh | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/local/snmp-ucd.sh b/local/snmp-ucd.sh new file mode 100755 index 0000000..7d16b74 --- /dev/null +++ b/local/snmp-ucd.sh @@ -0,0 +1,187 @@ +#!/bin/sh +# +# snmpd-ucd.sh +# +# Start UCD SNMP daemon and trap catcher. Backup the log file *first* +# since currently the daemon truncates and overwrites any pre-existing file. +# +# killproc() and pidofproc() lifted from Linux's /etc/init.d/functions. +# +# NOTE: Solaris users must uncomment the proper PSARGS definition below. XXX +# + +USAGE="Usage: `basename $0` start|stop|restart" + + + +#------------------------------------ -o- +# Globals. +# +DAEMONLOG=/var/log/snmpd.log + TRAPLOG=/var/log/snmptrapd.log + LOGDIR=/var/log/SNMPDLOGS + +D=".`date '+%h%d_%H%M' | sed 's/\([a-z]\)0/\1/' | tr 'A-Z' 'a-z'`" + +PSARGS=auwwx +#PSARGS=-ef # Solaris. + +DEBUGFLAG= # -D # Toggles use of debugging + + + + +#------------------------------------ -o- +# Function definitions. +# +killproc() { # <program> [signal] + base= + killlevel="-9" + notset=1 + pid= + + + # + # Parse. + # + [ $# = 0 ] && { + echo "`basename $0`: Wrong arguments to killproc()." 1>&2 + return 1 + } + base="`basename $1`" + [ -n "$2" ] && { + killlevel=$2 + notset=0 + } + + + # + # Kill process. + # + pid=`pidofproc $base 2>/dev/null` + [ -z "$pid" ] && { + pid=`ps $PSARGS | egrep $base | egrep -v egrep | egrep -v $0 | awk '{ print $2 }'`; + } + [ -z "$pid" ] && { + echo "`basename $0`: killproc: Could not find process ID." + } + + [ -n "$pid" ] && { + echo -n "$base " + + # + # Kill with -TERM then -KILL by default. Use given + # instead if one was passed in. + # + [ "$notset" = 1 ] && { + kill -TERM $pid + sleep 1 + + [ -n "`ps $PSARGS | + awk '{print $2}' | grep $pid`" ] && { + sleep 3 + kill -KILL $pid + } + + true + } || { + kill $killlevel $pid + } + } + + rm -f /var/run/$base.pid + +} # end killproc() + + +pidofproc() { # <program> + pid= + + [ $# = 0 ] && { + echo "`basename $0`: Wrong argument to pidofproc()." 1>&2 + return 1 + } + + # + # Try looking for a /var/run file. + # + [ -f /var/run/$1.pid ] && { + pid=`head -1 /var/run/$1.pid` + + [ -n "$pid" ] && { + echo $pid + return 0 + } + } + + # + # Try pidof. (Linux offering.) + # + pid=`pidof $1` + [ -n "$pid" ] && { + echo $pid + return 0 + } + + # + # Try ps. + # + ps $PSARGS | awk ' BEGIN { prog=ARGV[1]; ARGC=1 } + { if ((prog == $11) || + (("(" prog ")") == $11) || + ((prog ":") == $11)) + { + print $2 + } + }' $1 +} # end pidofproc() + + + +#------------------------------------ -o- +# Action. +# +case "$1" in + start) + echo "Starting SNMP. " + + cp $DAEMONLOG ${DAEMONLOG}$D + cp $TRAPLOG ${TRAPLOG}$D + cat /dev/null >$TRAPLOG + + [ ! -e $LOGDIR ] && mkdir $LOGDIR + mv ${DAEMONLOG}$D ${TRAPLOG}$D $LOGDIR + gzip -r $LOGDIR 2>/dev/null & + + snmpd -a -d -V $DEBUGFLAG + snmptrapd -Lf "$TRAPLOG" + + echo + ;; + + stop) + echo -n "Shutting down SNMP: " + + killproc snmpd + killproc snmptrapd + + echo + ;; + + restart) + $0 stop + $0 start + ;; + + *) + echo $USAGE 1>&2 + exit 1 +esac + + + +#------------------------------------ -o- +# +exit 0 + + |