Dovecot automatisch neu starten
Auch bei Linux kann es mal passieren, dass einzelne Prozesse, wie z.B. der Apache, Postfix oder Dovecot hängen bleiben oder einfach beendet werden.
Ein generelles Problem ist es auch, wenn die Systemzeit durch eine Abfrage z.B. per ntime zurückgestellt wird, dann wird der Mailserver mit folgender Fehlermeldung gnadenlos beendet.
Time just moved backwards by xx seconds. This might cause a lot of problems, so I’ll just kill myself now.
Nun gibt es tolle Tools wie die DaemonTools. Diese überwachen alle möglichen Prozesse und starten sie bei Bedarf neu. Allerdings ist die Einrichtung der DaemonTools nicht ganz einfach und bei einem Fehler geht nichts mehr.
Einfacher ist es, einfach regelmäßig nach zu schauen ob auf dem Port eines Prozesses gelauscht wird. Wenn der Prozess nicht lauscht, so wird dieser neu gestartet.
Einen Lösungsansatz liefert das Wiki gleich mit. Dieses kleines Script prüft, ob auf einem der Dovecot-Ports, der Prozess lauscht. Wenn nicht, dann wird Dovecot neu gestartet.
Ich habe das Originalscript etwas abgeändert damit es keine Probleme mit den Pfad zu lsof gibt:
/usr/local/sbin/dovecot_check_restart.sh
#!/bin/sh HOST='localhost' PORT=110 #PORT=143 #HP=@$HOST:$PORT HP=:$PORT echo 'Checking to see if Dovecot is up...' if ( lsof -Pni $HP | grep "$PORT (LISTEN)" 2>&1 >/dev/null ); then echo 'Dovecot is up'; else echo 'Dovecot is down, restarting...'; /etc/init.d/dovecot restart logger -p mail.info dovecot_check_restart.sh restarting Dovecot fi
Das Script muss nun noch regelmässig aufgerufen werden, das machen wir auch gleich über den Crontab
# Dovecot Check
* * * * * /usr/local/sbin/dovecot_check_restart.sh 2>&1 > /dev/null
Aller einer Minute prüft das Script ob auf dem Port 143 ein Prozess lauscht. So ist gewährleistet, dass Dovecot nur kurzzeitig ausfällt. Aber man sollte aber trotzdem regelmäßig die Logs prüfen und bei auffällig vielen Neustarts die Ursache für den Absturz beseitigen!
Übrigens, wie man Postfix automatisch neu startet erfahren Sie in diesem Beitrag.
Danke, jetzt endlich habe ich dies wirklich kapiert 🙂