Sfoglia il codice sorgente

Add test for Oracle name server, can dynamicall determine ORACLE_HOME - tom Bertelson

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@45 f882894a-f735-0410-b71e-b25c423dba1c
Subhendu Ghosh 24 anni fa
parent
commit
33d91abe09
1 ha cambiato i file con 65 aggiunte e 13 eliminazioni
  1. 65 13
      plugins-scripts/check_oracle.sh

+ 65 - 13
plugins-scripts/check_oracle.sh

@@ -36,6 +36,7 @@ print_usage() {
   echo "Usage:"
   echo "  $PROGNAME --tns <Oracle Sid or Hostname/IP address>"
   echo "  $PROGNAME --db <ORACLE_SID>"
+  echo "  $PROGNAME --oranames <Hostname>"
   echo "  $PROGNAME --help"
   echo "  $PROGNAME --version"
 }
@@ -52,13 +53,15 @@ print_help() {
   echo "--db=SID"
   echo "   Check local database (search /bin/ps for PMON process and check"
 	echo "   filesystem for sgadefORACLE_SID.dbf"
+  echo "--oranames=Hostname"
+  echo "   Check remote Oracle Names server"
   echo "--help"
 	echo "   Print this help screen"
   echo "--version"
 	echo "   Print version and license information"
 	echo ""
-  echo "If the plugin doesn't work, check that the $ORACLE_HOME environment"
-	echo "variable is set, that $ORACLE_HOME/bin is in your PATH, and the"
+  echo "If the plugin doesn't work, check that the ORACLE_HOME environment"
+	echo "variable is set, that ORACLE_HOME/bin is in your PATH, and the"
   echo "tnsnames.ora file is locatable and is properly configured."
   echo ""
   echo "When checking Local Database status your ORACLE_SID is case sensitive."
@@ -78,27 +81,76 @@ case "$1" in
     ;;
 esac
 
+# Hunt down a reasonable ORACLE_HOME
+if [ -z "$ORACLE_HOME" ] ; then
+	# Adjust to taste
+	for oratab in /var/opt/oracle/oratab /etc/oratab
+	do
+	[ ! -f $oratab ] && continue
+	ORACLE_HOME=`IFS=:
+		while read SID ORACLE_HOME junk;
+		do
+			if [ "$SID" = "$2" ] ; then
+				echo $ORACLE_HOME;
+				exit;
+			fi;
+		done < $oratab`
+	[ -n "$ORACLE_HOME" ] && break
+	done
+fi
+# Last resort
+[ -z "$ORACLE_HOME" -a -d $PROGPATH/oracle ] && ORACLE_HOME=$PROGPATH/oracle
+
+if [ -z "$ORACLE_HOME" -o ! -d "$ORACLE_HOME" ] ; then
+	echo "Cannot determine ORACLE_HOME for sid $2"
+	exit $STATE_UNKNOWN
+fi
+PATH=$PATH:$ORACLE_HOME/bin
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
+export ORACLE_HOME PATH LD_LIBRARY_PATH
+
 case "$cmd" in
 --tns)
-    export tnschk=` tnsping $2`
-    export tnschk2=` echo  $tnschk | grep -c OK`
-    export tnschk3=` echo $tnschk | cut -d\( -f7 | sed y/\)/" "/`
+    tnschk=` tnsping $2`
+    tnschk2=` echo  $tnschk | grep -c OK`
     if [ ${tnschk2} -eq 1 ] ; then 
+	tnschk3=` echo $tnschk | sed -e 's/.*(//' -e 's/).*//'`
 	echo "OK - reply time ${tnschk3} from $2"
-	exit 0
+	exit $STATE_OK
     else
 	echo "No TNS Listener on $2"
 	exit $STATE_CRITICAL
     fi
     ;;
+--oranames)
+    namesctl status $2 | awk '
+    /Server has been running for:/ {
+	msg = "OK: Up"
+	for (i = 6; i <= NF; i++) {
+	    msg = msg " " $i
+	}
+	status = '$STATE_OK'
+    }
+    /error/ {
+	msg = "CRITICAL: " $0
+	status = '$STATE_CRITICAL'
+    }
+    END {
+	print msg
+	exit status
+    }'
+    ;;
 --db)
-    export pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
-    if [ -e $ORACLE_HOME/dbs/sga*${2}* ] ; then
-	if [ ${pmonchk} -eq 1 ] ; then
-    export utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
-	    echo "${2} OK - running since ${utime}"
-	    exit $STATE_OK
-	fi
+    pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
+    if [ ${pmonchk} -ge 1 ] ; then
+	echo "${2} OK - ${pmonchk} PMON process(es) running"
+	exit $STATE_OK
+    #if [ -f $ORACLE_HOME/dbs/sga*${2}* ] ; then
+	#if [ ${pmonchk} -eq 1 ] ; then
+    #utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
+	    #echo "${2} OK - running since ${utime}"
+	    #exit $STATE_OK
+	#fi
     else
 	echo "${2} Database is DOWN"
 	exit $STATE_CRITICAL