# ------------------------------------------ # ######## Script Modifications ########## # ------------------------------------------ # Who When What # --- ---- ---- # EDT Add support for multiple bonding # # LGill ?? Add support for second bond module ie bond1 # # #!/bin/bash USAGE="`basename $0`" NOTFOUND=`/bin/echo -e "There are no bonded interfaces detected."` LINUXONLY=`/bin/echo -e "This script was written for Linux RedHat. If you are using another UNIX distribution you may need to edit the code.\n"` STATE_OK=0 STATE_OK_STR="OK" STATE_WARNING=1 STATE_WARNING_STR="WARNING" STATE_CRITICAL=2 STATE_CRITICAL_STR="CRITICAL" STATE_UNKNOWN=3 STATE_UNKNOWN_STR="UNKNOWN" NAGIOS_STATUS=$STATE_OK NAGIOS_STATUS_STR=$STATE_OK_STR NAGIOS_STATUS_SHORT="" MESSAGE="" # # temporary files BONDTMP=/tmp/bond.tmp ETHLIST=/tmp/ethlist.tmp ETHS=/tmp/eths.tmp ETHDOWN=/tmp/ethdown.tmp # # commands CAT=/bin/cat GREP=/bin/grep EGREP=/bin/egrep AWK=/usr/bin/gawk FIND=/usr/bin/find SED=/bin/sed WC=/usr/bin/wc TAIL=/usr/bin/tail ECHO=/bin/echo LS=/bin/ls TR=/usr/bin/tr # # emtpy temp files $CAT /dev/null > $BONDTMP $CAT /dev/null > $ETHLIST $CAT /dev/null > $ETHS $CAT /dev/null > $ETHDOWN # # Print usage if [[ $# -ne 0 ]] then echo -e "\n\nWrong Syntax: `basename $0` $*\n\n" echo -e "Usage: $USAGE\n\n" exit 0 fi function NAGIOS_Add() { MESSAGE="$MESSAGE$*" } function NAGIOS_Send() { echo -e "$NAGIOS_STATUS_STR $NAGIOS_STATUS_SHORT\n$MESSAGE" } function NAGIOS_SetStatus() { if [ "$2" != "" ] then NAGIOS_STATUS_SHORT="$NAGIOS_STATUS_SHORT$2" fi if [ $1 -gt $NAGIOS_STATUS ] then NAGIOS_STATUS=$1 if [ "$NAGIOS_STATUS" = "$STATE_WARNING" ] then NAGIOS_STATUS_STR=$STATE_WARNING_STR else if [ "$NAGIOS_STATUS" = "$STATE_CRITICAL" ] then NAGIOS_STATUS_STR=$STATE_WARNING_STR else if [ "$NAGIOS_STATUS" = "$STATE_OK" ] then NAGIOS_STATUS_STR=$STATE_WARNING_OK fi fi fi fi } # # count bond interfaces COUNTBONDS=`$FIND /proc/net -name bonding -exec $LS {} \;| $WC -l` if [[ "$COUNTBONDS" -lt 1 ]] then $ECHO -e "\n\n$NOTFOUND\n\n$LINUXONLY\n\n\n" exit 3 fi # verify bond count are actual bond modules BONDLIST=`$FIND /proc/net -name bonding -exec $LS {} \;` #BOND0TRUE=`$GREP bond0 $BONDTMP` #BOND1TRUE=`$GREP bond1 $BONDTMP` #if [[ "$COUNTBONDS" -eq 1 ]] # then for listBond in $BONDLIST do if [ -f $ETHDOWN ] then /bin/rm $ETHDOWN fi if [ -f $ETHS ] then /bin/rm $ETHS fi BONDMODE=`$CAT /proc/net/bonding/$listBond |$GREP "Bonding Mode"|$AWK {'print $3$4$5'}` $CAT /proc/net/bonding/$listBond |$GREP eth|$AWK {'print $3'}|$EGREP -v "Slave|Master|Interface|Active" > $ETHLIST $CAT $ETHLIST| while read list do $CAT /proc/net/bonding/$listBond |$GREP -A 1 "$list"|$AWK {'print $3'}|$SED 's/Slave/Bond/'|$TR "\n" " " >> $ETHS $CAT $ETHS |$GREP down >> $ETHDOWN done TESTSTATE=`grep down $ETHDOWN|wc -l` if [[ "$TESTSTATE" -gt 0 ]] then NAGIOS_Add "$listBond Bonding Mode: $BONDMODE. " TMP=`$CAT $ETHDOWN|$TAIL -1` NAGIOS_Add "$TMP\n" NAGIOS_SetStatus $STATE_CRITICAL "$listBond failed" else NAGIOS_Add "$listBond Bonding Mode: $BONDMODE. " TMP=`$CAT $ETHS` NAGIOS_Add "$TMP\n" NAGIOS_SetStatus $STATE_OK "$listBond ok " fi done #fi NAGIOS_Send exit $NAGIOS_STATUS