1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
#!/usr/bin/perl
#
# See LICENSE for copyright information
#
# check_named_proc.pl <host> [warn] [critical] [process] <port>
#
# Netsaint host script to check to see if a certain process is running.
#
require 5.003;
BEGIN { $ENV{PATH} = '/bin' }
use Socket;
use POSIX;
use strict;
sub usage;
my $TIMEOUT = 15;
my %ERRORS = ('UNKNOWN', '-1',
'OK', '0',
'WARNING', '1',
'CRITICAL', '2');
my $remote = shift;
my $warn = shift;
my $crit = shift;
my $args = shift || &usage(%ERRORS);
my $port = shift || 1040;
my $remoteaddr = inet_aton("$remote");
my $paddr = sockaddr_in($port, $remoteaddr) || die "Can't create info for connection: #!\n";;
my $proto = getprotobyname('tcp');
socket(Server, PF_INET, SOCK_STREAM, $proto) || die "Can't create socket: $!";
setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, 1);
# Just in case of problems, let's not hang NetSaint
$SIG{'ALRM'} = sub {
close(Server);
select(STDOUT);
print "No Answer from Client\n";
exit $ERRORS{"UNKNOWN"};
};
alarm($TIMEOUT);
# send ourselves a SIGALRM if we cannot connect to the client
unless (connect(Server, $paddr)) {
kill 'ALRM', $$;
}
my $state = "OK";
my $answer = undef;
select(Server);
$| = 1;
print Server "named_proc $args\n";
my ($servanswer) = <Server>;
alarm(0);
close(Server);
select(STDOUT);
if ($servanswer <= $warn)
{
$state = "WARNING";
$answer = "Only $servanswer processes named $args running\n";
}
elsif ($servanswer <= $crit)
{
$state = "CRITICAL";
$answer = "Only $servanswer processes named $args running\n";
}
elsif ($servanswer > $warn)
{
$answer = "$servanswer processes named $args running\n";
}
else
{
$state = "UNKNOWN";
$answer = "Number of processes named $args unknown!\n";
}
print $answer;
exit $ERRORS{$state};
sub usage
{
print "Minimum arguments not supplied!\n\n";
print "Perl Check Named Process plugin for NetSaint\n";
print "Copyright (c) 2000 Charlie Cook & Nick Reinking\n\n";
print "Usage: $0 <host> <warn> <crit> <process> <port>\n\n";
print "<warn> = Number of processes named <process> to warn at.\n";
print "<crit> = Number of processes named <process> to go critical at.\n";
print "<process> = Name of process to look for.\n";
print "<port> = Port that the status daemon is running on <host>.\n";
exit $ERRORS{"UNKNOWN"};
}
|