diff options
author | Petter Reinholdtsen <pere@hungry.com> | 2010-01-31 20:30:09 +0000 |
---|---|---|
committer | Petter Reinholdtsen <pere@hungry.com> | 2010-01-31 20:30:09 +0000 |
commit | 2cd1c62676f0f8b6e078197fb9d816e359cdfe78 (patch) | |
tree | 2ef2fc2d36d6eeba7e6a57cc416c9c4c09ab4ef8 /nagios-plugins | |
parent | ff0cc03d45b49a91d3d0347967c480bc764821da (diff) | |
download | sitesummary-2cd1c62676f0f8b6e078197fb9d816e359cdfe78.tar.gz sitesummary-2cd1c62676f0f8b6e078197fb9d816e359cdfe78.tar.bz2 sitesummary-2cd1c62676f0f8b6e078197fb9d816e359cdfe78.tar.xz |
Add new nagios pluing check_kernel_status to report the need for a
reboot to activate a new kernel. Written by Toni Van Remortel and
found at <URL: http://www.monitoringexchange.org >.
Diffstat (limited to 'nagios-plugins')
-rwxr-xr-x | nagios-plugins/check_kernel_status | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/nagios-plugins/check_kernel_status b/nagios-plugins/check_kernel_status new file mode 100755 index 0000000..b7faff6 --- /dev/null +++ b/nagios-plugins/check_kernel_status @@ -0,0 +1,120 @@ +#!/usr/bin/perl +# check_kernel_status : check if the running kernel is the latest installed +# By Toni Van Remortel [toni.van.remortel@p-ops.be] +# 2008-07-28 +# GPLv2 +# Downloaded from +# http://www.monitoringexchange.org/attachment/download/Check-Plugins/Operating-Systems/Linux/Running-kernel-compared-to-installed-kernel-version/check_kernel_status + +$OK = 0; +$WARN = 1; +$CRIT = 2; +$UNKN = 3; + +# First, find the current running kernel version +if ( -e '/proc/version_signature' ) +{ + # Likely Ubuntu + $sig = `cat /proc/version_signature`; + if ( $sig =~ /.* (\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)-[generic|server]/ ) + { + @running_version = ($1, $2, $3, $4, $5); + } + else + { + print "UNKNOWN - Cannot find running Ubuntu kernel version\n"; + exit $UNKN; + } +} +elsif ( -e '/proc/version' ) +{ + # Likely Debian + $sig = `cat /proc/version`; + if ( $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+)\)/ + || $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+)\w+(\d+)\)/ + || $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)-(\d+).+?(\d+).+?(\d+)\)/ + || $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)-(\d+)lenny(\d+)\)/ + ) + { + @running_version = ($1, $2, $3, $4, $5, $6); + } + else + { + print "UNKNOWN - Cannot find running Debian kernel version\n"; + exit $UNKN; + } +} +else +{ + print "UNKNOWN - Cannot extract running kernel info\n"; + exit $UNKN; +} + +# Next, find the installed kernel version +# Yes, as you can see, it is limited to 2.6 kernels here. +# But I assume that you don't need reboots anymore when this major version has passed. +$dpkg_list = `dpkg -l | grep linux-image-2.6`; +chomp($dpkg_list); +@dpkg_lines = split("\n", $dpkg_list); +$dpkg = pop(@dpkg_lines); + +# Now, which OS is it, and which footprint do they use? +if ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)/ ) +{ + # Ubuntu + @installed_version = ($1, $2, $3, $4, $5, 0); +} +elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+)\w+(\d+)/ ) +{ + # Debian Etch and older + @installed_version = ($1, $2, $3, $4, $5, $6); +} +elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+) / ) +{ + # Debian Etch and older + @installed_version = ($1, $2, $3, $4, $5, 0); +} +elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)-(\d+)\~.+?(\d+).+?(\d+)/ ) +{ + # Debian Etch and older + @installed_version = ($1, $2, $3, $4, $5, $6); +} +elsif ( $dpkg =~ /Debian (\d+)\.(\d+)\.(\d+)\+(\d+)\+lenny(\d+)/ ) +{ + # Debian Lenny + @installed_version = ($1, $2, $3, $4, $5, 0); +} +elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)-(\d+)lenny(\d+)/ ) +{ + # Debian Lenny + @installed_version = ($1, $2, $3, $4, $5, 0); +} +elsif ( $dpkg =~ / (\d+)\.(\d+)\.(\d+)-(\d+)/ ) +{ + # Debian Lenny + @installed_version = ($1, $2, $3, $4, 0, 0); +} +else +{ + print "UNKNOWN - Could not determine installed version.\n"; + exit $UNKN; +} + +# Calculate sums for easy comparison +$running_version_sum = sprintf("%02d%02d%02d%02d%02d%02d", @running_version); +$installed_version_sum = sprintf("%02d%02d%02d%02d%02d%02d", @installed_version); +# And some readable format +$print_running_version = sprintf("%d.%d.%d-%d.%d.%d", @running_version); +$print_installed_version = sprintf("%d.%d.%d-%d.%d.%d", @installed_version); + +# Do we need a reboot? +if ( $running_version_sum < $installed_version_sum ) +{ + print "WARNING - Reboot required : running kernel = $print_running_version, installed kernel = $print_installed_version\n"; + exit $WARN; +} +else +{ + print "OK - running kernel = $print_running_version, installed kernel = $print_installed_version\n"; + exit $OK; +} |