<HTML>
<HEAD>
<TITLE>Re: NRPE: Unable to read output</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>I guess I should include the plugin script:<BR>
<BR>
#!/usr/bin/perl -w<BR>
<BR>
#check for item count in ListingCatlogue URL<BR>
<BR>
use POSIX;<BR>
use strict;<BR>
use File::Basename;<BR>
use Getopt::Long;<BR>
<BR>
<BR>
use vars qw(<BR>
            $opt_critical<BR>
            $opt_warning<BR>
            $opt_username<BR>
            $opt_password<BR>
            $opt_instance<BR>
            $opt_help<BR>
            $opt_usage<BR>
            $opt_version<BR>
           );<BR>
<BR>
sub print_usage();<BR>
sub print_help();<BR>
<BR>
#<BR>
# Version and Author info<BR>
my $author = "Matthew Litwin";<BR>
my $datemod = "September 2, 2009";<BR>
my $version = "0.1.0";<BR>
# 0.1.0 - initial cannibalization from check_lcs_update.pl<BR>
<BR>
my $progname = basename($0);<BR>
<BR>
my %ERRORS = ('UNKNOWN'  => '-1',<BR>
              'OK'       => '0',<BR>
              'WARNING'  => '1',<BR>
              'CRITICAL' => '2');<BR>
<BR>
my $sqlplus = '/opt/oracle/product/10gRac/bin/sqlplus';<BR>
my $sqlfile = '/usr/local/nagios/libexec/check_scrub_backlog.sql';<BR>
<BR>
Getopt::Long::Configure('bundling');<BR>
GetOptions<BR>
  (<BR>
   "c=s" => \$opt_critical, "critical=s" => \$opt_critical,<BR>
   "w=s" => \$opt_warning,  "warning=s"  => \$opt_warning,<BR>
   "u=s" => \$opt_username, "username=s" => \$opt_username,<BR>
   "p=s" => \$opt_password, "password=s" => \$opt_password,<BR>
   "i=s" => \$opt_instance, "instance=s" => \$opt_instance,<BR>
   "h"   => \$opt_help,     "help"       => \$opt_help,<BR>
                            "usage"      => \$opt_usage,<BR>
   "V"   => \$opt_version,"version"    => \$opt_version<BR>
  ) || die "Try `$progname --help' for more information.\n";<BR>
<BR>
sub print_usage() {<BR>
  print "Usage: $progname -w WARNING -c CRITICAL -u username -p password -i instance\n";<BR>
  print "       $progname --help\n";<BR>
  print "       $progname --version\n";<BR>
}<BR>
<BR>
sub print_help() {<BR>
  print "$progname - check item count in ListingCatlogue URL\n";<BR>
  print "Options are:\n";<BR>
  print "  -c, --critical\n";<BR>
  print "  -w, --warning\n";<BR>
  print "  -u, --username\n";<BR>
  print "  -p, --password\n";<BR>
  print "  -i, --instance\n";<BR>
  print "  -h, --help                      display this help and exit\n";<BR>
  print "      --usage                     display a short usage instruction\n";<BR>
  print "  -V, --version                   output version information and exit\n";<BR>
}<BR>
<BR>
if ($opt_help) {<BR>
  print_help();<BR>
  exit $ERRORS{'UNKNOWN'};<BR>
}<BR>
<BR>
if ($opt_usage || !($opt_critical && $opt_warning && $opt_username && $opt_password && $opt_instance && $opt_instance))  {<BR>
  print_usage();<BR>
  exit $ERRORS{'UNKNOWN'};<BR>
}<BR>
<BR>
if ($opt_version) {<BR>
  print "$progname $version\n";<BR>
  print "$author, $datemod\n";<BR>
  exit $ERRORS{'UNKNOWN'};<BR>
}<BR>
<BR>
if (!-x $sqlplus) {<BR>
  print "sqlplus not found or not executable at: $sqlplus\n";<BR>
  exit $ERRORS{'UNKNOWN'};<BR>
}<BR>
<BR>
if (!-r $sqlfile) {<BR>
  print "sql command file not found or not readable at: $sqlfile\n";<BR>
  exit $ERRORS{'UNKNOWN'};<BR>
}<BR>
 <BR>
# This SQL request returns a row count.<BR>
my $scrubcount=`$sqlplus -S $opt_username/$opt_password\@$opt_instance \@$sqlfile`;<BR>
<BR>
if ($? == 0) {<BR>
  chomp($scrubcount);<BR>
  $scrubcount =~ s/^\s+//;<BR>
  if ($scrubcount =~ m/^\d+$/) {<BR>
    print "Scrub Backlog Count: $scrubcount\n";<BR>
    my $state;<BR>
    $state="OK";<BR>
    if ($scrubcount >= $opt_warning) {$state="WARNING";}<BR>
    if ($scrubcount >= $opt_critical) {$state="CRITICAL";}<BR>
    exit $ERRORS{$state};<BR>
  } else {<BR>
    print "Output not a numeric value\n";<BR>
    exit $ERRORS{'UNKNOWN'};<BR>
  }<BR>
} else {<BR>
  print "sqlplus error: $?\n";<BR>
  exit $ERRORS{'UNKNOWN'};<BR>
}<BR>
<BR>
<BR>
On 9/3/09 12:48 PM, "Matthew Litwin" <<a href="mlitwin@stubhub.com">mlitwin@stubhub.com</a>> wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>I wrote a perl plugin that seems to work fine when I run it locally on the remote host as the nagios user, however when I try to execute it via NRPE I get the old familiar nebulous “NRPE: Unable to read output”. I have debugging on for NRPE logging and it doesn’t tell much more. (Note this is in reverse order is it is out of splunk. IPs are obfuscated)<BR>
<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 903583 daemon.debug] Connection from X.X.X.X closed.<BR>
host=sjvp00dbs001.XX.com Options sourcetype=syslog Options source=udp:514 Options<BR>
589/3/09 7:27:01.000 PM<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 869297 daemon.debug] Return Code: 1, Output: NRPE: Unable to read output<BR>
host=sjvp00dbs001.XX.com Options sourcetype=syslog Options source=udp:514 Options<BR>
599/3/09 7:27:01.000 PM<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 757686 daemon.debug] Command completed with return code 1 and output: <BR>
host=sjvp00dbs001.XX.com Options sourcetype=syslog Options source=udp:514 Options<BR>
609/3/09 7:27:01.000 PM<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 462736 daemon.debug] Running command: /usr/loca/nagios/libexec/check_scrub_backlog.pl -w 1000 -c 2000 -u XXXX -p XXXX -i XXXX<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 881351 daemon.debug] Host is asking for command 'check_scrub_backlog' to be run...<BR>
host=sjvp00dbs001.XX.com Options sourcetype=syslog Options source=udp:514 Options<BR>
629/3/09 7:27:01.000 PM<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 385967 daemon.debug] Host address is in allowed_hosts<BR>
host=sjvp00dbs001.XX.com Options sourcetype=syslog Options source=udp:514 Options<BR>
639/3/09 7:27:01.000 PM<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 654915 daemon.debug] Connection from X.X.X.X port 34549<BR>
host=sjvp00dbs001.XX.com Options sourcetype=syslog Options source=udp:514 Options<BR>
649/3/09 7:27:01.000 PM<BR>
Sep  3 19:27:01 sjvp00dbs001.XX.com Sep  3 19:27:01 nrpe[12434]: [ID 879649 daemon.debug] Handling the connection...<BR>
<BR>
The command that is trying to run looks corrected- arguments are being sent correctly. I have tested the command using the same user that NRPE is running as, nagios. I did build in output for error messages in case there were problems like issues with ENV, but obviously they are not making it to NRPE. I confirmed my output text has EOLs. What is especially weird is that the return code makes it back correctly but the output is just “NRPE: Unable to read output” even as logged by nrpe.<BR>
<BR>
The output should look like this, which is what it gets locally when ran:<BR>
Scrub Backlog Count: 1083<BR>
<BR>
Nothing unusually with that, right?<BR>
<BR>
Any help appreciated, thanks.<BR>
<BR>
<BR>
<BR>
Does anyone have any other suggestions on how I might debug this? Since NRPE is working for all my other plugins<BR>
</SPAN></FONT></BLOCKQUOTE>
</BODY>
</HTML>