Laatst kwam ik er achter dat mijn mail niet werd verstuurd omdat mijn mailserver down was.
Om dit te voorkomen heb ik een script geschreven die controleerd of de mailserver UP of DOWN is.
Indien de mailserver Down is zal de server een schop krijgen en als de schop succesvol is wordt er een mailtje naar je gestuurd met daarin de laatste X aantal regels uit /var/log/messages.
Het script ziet er als volgt uit:
#!/bin/sh
LOGFILE=/var/log/messages # Logfile
MSGUP="De mailserver is UP!" # Bericht als de mailserver UP is
MSGDOWN="De mailserver is DOWN!" # Bericht als de mailserver DOWN is
MSGRECOVER="De mailserver leeft weer" # Bericht als de mailserver weer UP is na een herstart
MSGSTILLDOWN="Het herstarten van de mailserver is mislukt" # Bericht als de mailserver na het herstart commando nog steeds down is
PFSTART="/volume1/@appstore/MailServer/sbin/postfix start" # Start Postfix commando
FROM=VANMIJ@DOMEIN.NLl # Van wie moet de mail afkomstig zijn
TO=VOORJOU@DOMEIN.NL # Naar wie moet er een mail verstuurd worden
SUBJECT="Mailserver-watchdog: Mailserver restarted - $(date)" # Wat moet het onderwerp van de mail zijn
LOGNUM="40" # Aantal regels messages logfile dan in de mail moet komen te staan
# controleer of de Mailserver UP of DOWN is.
if [ "$( netstat -an | grep LIST | grep smtp )" ]; then
# Als de mailserver UP is, laat dit dan weten in de logfile.
echo $MSGUP >> $LOGFILE
else
# Als de mailserver DOWN is, laat dit dan weten en herstart de mailserver
echo $MSGDOWN >> $LOGFILE
$PFSTART >> $LOGFILE
# Doe 5 seconden niets, controleer of de mailserver nu wel up is
sleep 5
if [ "$( netstat -an | grep LIST | grep smtp )" ]; then
# Als de mailserver nu wel UP is, laat dit weten in de lofgile en stuur een e-mail dat de mailserver weer UP is.
echo $MSGRECOVER >> $LOGFILE
# Stuur een mailtje dat de server weer up is
#HEADERS
echo "from: $FROM" > ./mail
echo "to:$TO" >> ./mail
echo "subject:$SUBJECT" >> ./mail
#BODY
echo "Last $LOGNUM lines from Messages log:" >> ./mail
tail -n $LOGNUM /var/log/messages >> ./mail
echo >> ./mail
echo >> ./mail
echo "Good luck troubleshooting!" >> ./mail
#MAIL
cat ./mail | sendmail -t
rm -f ./mail
else
# Als de herstart niet heeft geholpen, vermeld dit dan in de logfile
echo $MSGSTILLDOWN >> $LOGFILE
fi
fi
Bij mij staat het script in:
/opt/home/
maak het script aan:
vi mailserver_check.sh
plak bovenstaand script in het mailserver_check.sh bestand en pas de waarden aan van je mail adres e.d.
Zorg dat de rechten goed staan zodat het script uitgevoerd kan worden:
chmod 755 mailserver_check.sh
Je kunt het script zo uitvoeren:
./mailserver_check.sh
Dit script kun je in je crontab plaatsen om er voor te zorgen dat dit script bijvoorbeeld elk uur een keer wordt uitgevoerd.
Hoe crontab werkt lees je op de site van
wizjosvi /etc/crontab
Mijn crontab entry ziet er zo uit:
* */1 * * * root /opt/home/mailserver_check.sh
crontab herstarten zodat de controle gelijk in gaat:
/usr/syno/etc/rc.d/S04crond.sh stop
/usr/syno/etc/rc.d/S04crond.sh start