Come al solito pubblico un articolo dopo aver avuto delle particolari necessità, questa volta dovevo mettere sotto monitoraggio il mail server, qmail.
Succedeva che per quelche motivo il DNS server al quale puntavo non riconosceva alcuni domini, il problema diventa serio quando un cliente prende l'hosting da me e lascia la posta su un'altro provider, configuo dominio e tutto va bene, fin quando perà le mail che partivano dal mio server restavano in coda.
Ci ho messo un po a capire che la mancata consegna della posta fosse dovuta da un record DNS non esatto.
Modificando il file /etc/resolv.conf e mettendo in testa il DNS di google tutto filava liscio.
Vista la brutta esperienza, considerando che gran parte dell'hosting offerto ospita siti di commercio elettronico, o comunque aziendiali, ho deciso di mettere un semplice script che possa avvisarmi quanso c'è coda e quando le mail non vengono processate.
#!/bin/bash
# Verifico le mail in CODA e in CODA NON PROCESSATE
# SE LA CODA (Q) E' MAGGIORE DI 1 E LA
# CODA NON PREOCESSATA (QNP) MAGGIORE DI 0
# INVIO UNA MAIL IN FORMATO HTML
DOMINIO="lbit-solution.it"
DESTINATARIO="supporto"
NOMEDEST="Supporto LBiT"
DIR="/var/monitoraggio/script"
# CODA ATTIVA
/var/qmail/bin/qmail-qstat |grep -v not|awk '{print $4}' > $DIR/queue
# MAIL IN CODA NON PROCESSATE
/var/qmail/bin/qmail-qstat |grep -i not|awk '{print $8}' > $DIR/queuen
Q=`cat $DIR/queue`
QNP=`cat $DIR/queuen`
if [ $(cat $DIR/queue) -gt "1" ] || [ $(cat $DIR/queuen) -gt "0" ]
then
cat > /tmp/alertQueue.html <<DT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Alert filesystem</title>
</head>
<body>
<h1 >MAIL IN CODA VERIFICARE IL MAIL SERVER Q=$Q QNP=$QNP</h1>
<h3>Attenzione, il mail server non riesce a smaltire o a consegnare alcune mail </h3>
<p><a
href="http://www.lbit-solution.it/monitoraggio/index.php">Pagina
di monitoraggio</a></p>
<br />
Ci sono <b>$Q</b> mail in coda e
<b>$QNP</b> mail non processate. <br
/>
<br />
<p>
Di seguito le mail in coda:<br />
$( /var/qmail/bin/qmail-qread|tr -d '\011'|sed -e :a -e
'$!N;s/\nremote//;ta' -e 'P;D'|sed -e 's/</mittente: /g' -e
's/>/ destinatario:/g' | while read queue; do
echo "$queue <br />"
done)
</p>
<br />
<h5><a
href="http://www.lbit-solution.it">Mail send by LBiT soluzioni
informatiche</a></h5>
</body>
</html>
DT
(cat <<EOCAT
Subject: [$(hostname)] Queue Mali Alert Q $Q QNP $QNP
MIME-Version: 1.0
Content-Type: text/html
Content-Disposition: inline
From:$(hostname) <no-replay@$DOMINIO>
Reply-To:$NOMEDEST<$DESTINATARIO@$DOMINIO>
EOCAT
cat /tmp/alertQueue.html) | /usr/sbin/sendmail supporto@lbit-solution.it
rm -f /tmp/alertQueue.html
fi
Finito lo script è stato messo in crontab e gira ogni 5 minuti, devo dire che diversi provider esterni hanno dei tempi lentissimi nel ricevere la posta, questo banale script mi consente di offrire un servizio migliore e di accorgermi di eventuali problemi prima del cliente.