aboutsummaryrefslogtreecommitdiffstats
path: root/nagios-plugins
diff options
context:
space:
mode:
authorPetter Reinholdtsen <pere@hungry.com>2010-01-31 20:30:09 +0000
committerPetter Reinholdtsen <pere@hungry.com>2010-01-31 20:30:09 +0000
commit2cd1c62676f0f8b6e078197fb9d816e359cdfe78 (patch)
tree2ef2fc2d36d6eeba7e6a57cc416c9c4c09ab4ef8 /nagios-plugins
parentff0cc03d45b49a91d3d0347967c480bc764821da (diff)
downloadsitesummary-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-xnagios-plugins/check_kernel_status120
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;
+}