Postfix queue monitoring script

Here is a small Perl script which can be useful as a Postfix queue monitor (count number of emails in Postfix queue)

#!/usr/bin/env perl
# postfix queue/s size
# author:
# source:
use strict;
use warnings;
use Symbol;
sub count {
	my ($dir) = @_;
        my $dh = gensym();
        my $c = 0;
        opendir($dh, $dir) or die "$0: opendir: $dir: $!\n";
        while (my $f = readdir($dh)) {
                if ($f =~ m{^[A-F0-9]{5,}$}) {
                } elsif ($f =~ m{^[A-F0-9]$}) {
                        $c += count("$dir/$f");
	closedir($dh) or die "closedir: $dir: $!\n";
        return $c;
my $qdir = `postconf -h queue_directory`;
chdir($qdir) or die "$0: chdir: $qdir: $!\n";
printf "Incoming: %d\n", count("incoming");
printf "Active: %d\n", count("active");
printf "Deferred: %d\n", count("deferred");
printf "Bounced: %d\n", count("bounce");
printf "Hold: %d\n", count("hold");
printf "Corrupt: %d\n", count("corrupt");

Save script as queueStatus (for example), chmod +x to make it exec, and output

[root@s1 tmp]# ./queueStatus 
Incoming: 0
Active: 0
Deferred: 8
Bounced: 6
Hold: 0
Corrupt: 0

Leave a Reply

Your email address will not be published. Required fields are marked *