<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.0.6249.1">
<TITLE>Nagios plugin work in command, but not in Nagios</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P><FONT SIZE=2 FACE="Arial">Hi</FONT>

<BR><FONT SIZE=2 FACE="Arial">I've written a little perl script to report if anything is wrong with the Metadevices on a Solaris Server.</FONT>

<BR><FONT SIZE=2 FACE="Arial">Problem is that the script works perfectly in command mode, debugging show that it</FONT>

<BR><FONT SIZE=2 FACE="Arial">print some text and exit with exit $ERRORS{'CRITICAL'}; when metastat report error. However in Nagios all i get</FONT>

<BR><FONT SIZE=2 FACE="Arial">is OK and no output. </FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Here is the script, please note that i learned perl while creating this, so the problem might be the script.</FONT>

<BR><FONT SIZE=2 FACE="Arial">I think its made after the criterias in Nagios plug-in development guidelines.</FONT>
</P>
<BR>

<P><FONT SIZE=2 FACE="Courier New">#!/usr/bin/perl -w</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">use strict;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">use Getopt::Long;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">use vars qw($opt_V $opt_h $opt_H $PROGNAME);</FONT>

<BR><FONT SIZE=2 FACE="Courier New">use lib "/opt/sfw/nagios/libexec"  ;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">use utils qw(%ERRORS &print_revision &support &usage);</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">my $remote_user = "root";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $path_to_rsh = "/usr/bin/rsh -n";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $METADB="/usr/sbin/metadb";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $METAHS="/usr/sbin/metahs";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $METASTAT="/usr/sbin/metastat";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my @state;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my @avail;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $Row;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $newFld;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my @Fld;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $dbtrouble;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my @mdtrouble;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my @hstrouble;</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">$PROGNAME = "check_sds";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">$ENV{'PATH'}='';</FONT>

<BR><FONT SIZE=2 FACE="Courier New">$ENV{'BASH_ENV'}='';</FONT>

<BR><FONT SIZE=2 FACE="Courier New">$ENV{'ENV'}='';</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">Getopt::Long::Configure('bundling');</FONT>

<BR><FONT SIZE=2 FACE="Courier New">GetOptions</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        ("V"   => \$opt_V, "version"    => \$opt_V,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">         "h"   => \$opt_h, "help"       => \$opt_h,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">         "H=s" => \$opt_H, "hostname=s" => \$opt_H,);</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">if ($opt_V) {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        print_revision($PROGNAME,'$Revision: 0.1 $');</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        exit $ERRORS{'OK'};</FONT>

<BR><FONT SIZE=2 FACE="Courier New">}</FONT>

<BR><FONT SIZE=2 FACE="Courier New">if ($opt_h) {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        print_help();</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        exit $ERRORS{'OK'};</FONT>

<BR><FONT SIZE=2 FACE="Courier New">}</FONT>

<BR><FONT SIZE=2 FACE="Courier New">($opt_H) || usage("Host name/address not specified\n");</FONT>

<BR><FONT SIZE=2 FACE="Courier New">my $host = $1 if ($opt_H =~ /([-.A-Za-z0-9]+)/);</FONT>

<BR><FONT SIZE=2 FACE="Courier New">($host) || usage("Invalid host: $opt_H\n");</FONT>
</P>
<BR>
<BR>

<P><FONT SIZE=2 FACE="Courier New">#</FONT>

<BR><FONT SIZE=2 FACE="Courier New"># Check replicas for problems, capital letters in the flags indicate an error. </FONT>

<BR><FONT SIZE=2 FACE="Courier New"># </FONT>

<BR><FONT SIZE=2 FACE="Courier New">$dbtrouble=`$path_to_rsh -l $remote_user $opt_H $METADB`; chomp $dbtrouble; if ($dbtrouble =~ /[A-Z]/) {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        print "One or more Database replicas are not active\n";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        exit $ERRORS{'CRITICAL'};</FONT>

<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>

<P><FONT SIZE=2 FACE="Courier New">#</FONT>

<BR><FONT SIZE=2 FACE="Courier New"># Check the metadevice state, if the state is not Okay, something is up. </FONT>

<BR><FONT SIZE=2 FACE="Courier New"># </FONT>

<BR><FONT SIZE=2 FACE="Courier New">@mdtrouble=`$path_to_rsh -l $remote_user $host $METASTAT`; @state = grep /State:/ ,@mdtrouble; foreach $Row (@state) {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        chomp $Row;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        @Fld=split(":",$Row);</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        foreach $newFld ($Fld[1]) {</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">        if ($newFld !~ /Okay*/) {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">                print ("One or more Metadevices are not Okay\n");</FONT>

<BR><FONT SIZE=2 FACE="Courier New">                exit $ERRORS{'CRITICAL'};</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        }</FONT>

<BR><FONT SIZE=2 FACE="Courier New">    }</FONT>

<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>
<BR>

<P><FONT SIZE=2 FACE="Courier New">#</FONT>

<BR><FONT SIZE=2 FACE="Courier New"># Check the hotspares to see if any have been used.</FONT>

<BR><FONT SIZE=2 FACE="Courier New"># Not used yet.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">#@hstrouble=`$path_to_rsh -l $remote_user $host $METAHS -i`; #@avail = grep /blocks/ ,@hstrouble; # #foreach (@avail) {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">#        if (!/Available/) {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">#                print "Hot spares in usage\n";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">#                $eval=1;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">#                exit $ERRORS{'WARNING'};</FONT>

<BR><FONT SIZE=2 FACE="Courier New">#        }</FONT>

<BR><FONT SIZE=2 FACE="Courier New">#}</FONT>
</P>
<BR>

<P><FONT SIZE=2 FACE="Courier New">sub print_help {</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        print "\n\n";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        print "This plugin checks Disksuite status on a remote Solaris system \n\n";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        print "Usage:\t-H, --hostname=<HOST>\n\n\n";</FONT>

<BR><FONT SIZE=2 FACE="Courier New">        support();</FONT>

<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>

<P><FONT SIZE=2 FACE="Arial">Thanks</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Tommy Fallsen   </FONT>
</P>

</BODY>
</HTML>