#!/bin/bash ################################################################### # check_postfix_mailqueue is developped with GPL Licence 2.0 # # GPL License: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt # # Developped by : Bjoern Bongermino # ################################################################### # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # #################################################################### # Uncomment to enable debugging # set -x PROGNAME=`basename $0` VERSION="Version 1.0" AUTHOR="Bjoern Bongermino (http://www.bongermino.de)" STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 warning=0 critical=0 print_version() { echo "$PROGNAME $VERSION $AUTHOR" } print_help() { print_version $PROGNAME $VERSION echo "" echo "$PROGNAME - Checks postfix mailqueue statistic" echo "" echo "$PROGNAME is a Nagios plugin which generates statistics" echo "for the postfix mailqueue and checks for corrupt messages." echo "The following values will be checked:" echo "maildrop: Localy posted mail" echo "incoming: Processed local mail and received from network" echo "active: Mails being delivered (should be small)" echo "deferred: Stuck mails (that will be retried later)" echo "corrupt: Messages found to not be in correct format (shold be 0)" echo "hold: Recent addition, messages put on hold indefinitly - delete of free" echo "" echo "Usage: $PROGNAME -w WARN-Level -c CRIT-Level" echo "" echo "Options:" echo " -w)" echo " Warning level for deferred mails" echo " -c)" echo " Critical level for deferred mail" echo " -h)" echo " This help" echo " -v)" echo " Version" exit $STATE_OK } # Check for parameters while test -n "$1"; do case "$1" in -h) print_help exit $STATE_OK;; -v) print_version exit $STATE_OK;; -w) warning=$2 shift ;; -c) critical=$2 shift ;; *) check_postfix_mailqueue ;; esac shift done check_postfix_mailqueue() { # Can be set via environment, but default is fetched by postconf (if available, # else /var/spool/postfix) if which postconf > /dev/null ; then SPOOLDIR=${spooldir:-`postconf -h queue_directory`} else SPOOLDIR=${spooldir:-/var/spool/postfix} fi cd $SPOOLDIR >/dev/null 2>/dev/null || { echo -n "Cannot cd to $SPOOLDIR" exit $STATE_CRITICAL } # Get values deferred=`(test -d deferred && find deferred -type f ) | wc -l` active=`(test -d active && find active -type f ) | wc -l` maildrop=`(test -d maildrop && find maildrop -type f ) | wc -l` incoming=`(test -d incoming && find incoming -type f ) | wc -l` corrupt=`(test -d corrupt && find corrupt -type f ) | wc -l` hold=`( test -d hold && find hold -type f ) | wc -l` } check_postfix_mailqueue values="Deferred mails=$deferred Active deliveries=$active Locally posted mails=$maildrop Incoming mails=$incoming Corrupt mails=$corrupt Mails on hold=$hold" perfdata="deferred=$deferred;; active=$active;; maildrop=$maildrop;; incoming=$incoming;; corrupt=$corrupt;; hold=$hold;;" if [ $corrupt -gt 0 ]; then echo -n "Postfix Mailqueue CRITICAL - $corrupt corrupt messages found! | $perfdata" exit $STATE_CRITICAL fi if [ $warning -gt 0 ] && [ $critical -gt 0 ]; then if [ $deferred -gt $critical ]; then echo -n "Postfix Mailqueue CRITICAL - $values | $perfdata" exit $STATE_CRITICAL elif [ $deferred -gt $warning ]; then echo -n "Postfix Mailqueue WARNING - $values | $perfdata" exit $STATE_WARNING else echo -n "Postfix Mailqueue OK - $values | $perfdata" exit $STATE_OK fi else echo -n "Postfix Mailqueue OK - $values | $perfdata" exit $STATE_OK fi