From 3a4fc7a1acf01489554ceff0e5a2b08a992cc737 Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Fri, 2 Sep 2005 16:12:27 +0000 Subject: Add first version of check libs git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@10 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede --- nagios-check-libs | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100755 nagios-check-libs diff --git a/nagios-check-libs b/nagios-check-libs new file mode 100755 index 0000000..2d1e6e1 --- /dev/null +++ b/nagios-check-libs @@ -0,0 +1,95 @@ +#!/usr/bin/perl -Tw + +# Copyright (C) 2005 Peter Palfrader + +use strict; +use English; +use Getopt::Long; + +$ENV{'PATH'} = '/bin:/sbin:/usr/bin:/usr/sbin'; +delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; + +my $LSOF = '/usr/bin/lsof'; +my $VERSION = '0.0.0'; + +# nagios exit codes +my $OK = 0; +my $WARNING = 1; +my $CRITICAL = 2; +my $UNKNOWN = 3; + +my $params; + +Getopt::Long::config('bundling'); +if (!GetOptions ( + '--help' => \$params->{'help'}, + '--version' => \$params->{'version'}, + '--verbose' => \$params->{'verbose'}, + )) { + die ("$PROGRAM_NAME: Usage: $PROGRAM_NAME [--help|--version] [--verbose]\n"); +}; +if ($params->{'help'}) { + print "$PROGRAM_NAME: Usage: $PROGRAM_NAME [--help|--version] [--verbose]\n"; + print "Reports processes that are linked against libraries that no longer exist.\n"; + exit (0); +}; +if ($params->{'version'}) { + print "nagios-check-libs $VERSION\n"; + print "nagios check for availability of debian (security) updates\n"; + print "Copyright (c) 2005 Peter Palfrader \n"; + exit (0); +}; + +$SIG{'__DIE__'} = sub { + print STDERR @_; + exit $UNKNOWN; +}; + + +my %processes; + +sub getPIDs($$) { + my ($user, $process) = @_; + return join(', ', sort @{ $processes{$user}->{$process} }); +}; +sub getProcs($) { + my ($user) = @_; + + return join(', ', map { $_.' ('.getPIDs($user, $_).')' } (sort {$a cmp $b} keys %{ $processes{$user} })); +}; +sub getUsers() { + return join('; ', (map { $_.': '.getProcs($_) } (sort {$a cmp $b} keys %processes))); +}; + + + + +print STDERR "Running $LSOF +L\n" if $params->{'verbose'}; +open (LSOF, "$LSOF +L|") or die ("Cannot run $LSOF +L: $!\n"); +my @lsof=; +close LSOF; +if ($CHILD_ERROR) { # program failed + die("$LSOF +L returned with non-zero exit code: ".($CHILD_ERROR / 256)."\n"); +}; + +for my $line (@lsof) { + if ($line =~ m/path inode=/) { + my ($process, $pid, $user, $rest) = split /\s+/, $line; + #$processes{$user}->{$process} = [] unless defined $processes{$user}->{$process}; + push @{ $processes{$user}->{$process} }, $pid; + }; +}; + + + +my $message; +my $exit = $OK; +if (keys %processes) { + $exit = $CRITICAL; + $message = 'The following processes have libs linked that were upgraded: '. getUsers(); +} else { + $message = 'No upgraded libs linked in running processes'; +}; + +print $message,"\n"; +exit $exit; -- cgit v1.2.3