Spamassassin watchdog

From VVCWiki
Jump to navigationJump to search

Even though it doesn't happen quite often, sometimes spamd dies and that will lead to spam getting through. To prevent this here is a simple watchdog that can monitor status of the spamd

/usr/local/sbin/spamd.watch

#!/usr/bin/perl

use strict;
use IO::Socket;

my $spamd_tcp_port = 783;
my $timeout = 5 ; # seconds

my $sock = IO::Socket::INET->new( PeerAddr => 'localhost', 
   PeerPort => $spamd_tcp_port, Proto => "tcp", Timeout => $timeout);
my $return;

if ($sock && $sock->connected()) {
  eval {
    print $sock "PING SPAMC/1.0\n";
    local $SIG{ALRM} = sub {die "Timeout"};
    alarm $timeout;
    $return = <$sock>;
    alarm 0;
  };
  if ( defined ($@) && $@ eq "Timeout" ) {
    exit 0;
  }
  if ($return !~ /SPAMD.+PONG/ ) {
    exit 0;
  } else {
    exit 1;
  }
}
exit 0;

Now add this script into your cron:

*/4 * * * * root /usr/local/sbin/spamd.watch && /sbin/service spamassassin condrestart