Hyper-V環境のLinuxでDovecotが予期せず停止することがあります。原因のうち最も多いのは、システム時間が大幅にずれたため、Dovecotが停止してしまうものです。システム時間が大幅にずれないよう、以下の対応をするとこの現象を回避できます。
ntpdを起動して時刻を同期させます。ntpdによる時刻の同期はこちらの記事を参照してください。
Hyper-V環境では頻繁なタイマー割り込みはシステム時間の遅延につながるため、タイマー割り込みの間隔を延ばします。設定についてはこちらの記事を参照してください。
ntpdが時刻を同期しているか確認します。手順はこちらの記事を参照してください。
さらに安全策として、Dovecotが停止していた場合にはDovecotを起動するスクリプトを定期的に実行するようにします。
(参考URL http://wiki.dovecot.org/TimeMovedBackwards)
#!/bin/sh
LSOF=/usr/sbin/lsof
LOGGER=/usr/bin/logger
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
コマンドでcrontab編集モードにして以下を記述します。
* * * * * /etc/dovecot-check.sh 2>&1 > /dev/null
cron.hourlyを使う場合は、dovecot-check.shを /etc/cron.hourlyディレクトリに配置して一時間に1回実行させるようにしても良いです。