我が家のCentOS + Postfix + SpamAssassinで運用しているSMTPサーバーが、OS再起動後にエラーを出してクライアントからの送信や外部からのメール受け取りができなくなる現象が発生していました。原因究明は簡単で/var/log/maillogをみると、迷惑メールフィルタSpamAssassinが使用する/var/run/spamass.sockにパーミッションがないせいだとわかります。このファイルのオーナーをpostfixにしてやれば解決します。実はもうずっと前からこの現象が起きてたのですが、OSを再起動する機会自体が少ないので、都度手動で対応していました。
ですが最近の計画停電で発生頻度があがってきたので、まじめに対応をしようと。
で、このファイルを作成するのが/etc/init.d/spamass-milterです。このファイルの中に下記のようなブロックがあります。
start() {
echo -n $"Starting $desc ($prog): "
daemon $prog -p $SOCKET -f $EXTRA_FLAGS
RETVAL=$?
[ ! -s $SOCKET ] || sleep 30
chown postfix $SOCKET
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}
ちゃんと6行目で同じことしてるんですね。ただタイミングが早くて実際にこのファイルが作られる前に実行されてしまい、結果としてオーナー変更ができてなかったっぽいです。直前の行にあるsleepコマンドによる待ち時間を長めにとってみたところ解決できたっぽいです。ちなみに確か最初は5だったんですが、10にしてもダメでした。どれくらいの時間が適切かはお使いの環境によると思います。
OS再起動後、/var/run/spamass.sockのオーナーが最初からpostfixになっていれば成功です。