エラー警告メールを送信し、エスケープする処理を盛り込んだのだが、
エスケープの記述をしくじり、エンドレス送信が生じてしまった。
2時間程経過した際に以上に気づき、即座にプログラムは停止させ、/var/spool/mail/配下の指定アドレスの中身は処理したのだが、
postfixのキューに大量の残骸が残ってしまった。
遅延の遅延の遅延を繰り返し、頑張って送ってきてはいるが、
1万数千単位のメールが何時までも送られてくるため、当該ユーザの
通常のメールにも遅延が生じてしまっている状態。
そこで、postfixのキューを何とかして、通常の状態に戻してみた。
幸い、該当のメールのサイズが2kBと非常に小さいもので、他の遅延が殆どなかったので、
さらっと内容を確認して、該当のメールだけを削除する。
qmgr キューマネージャーにてメッセージはキューを通過する。
格納されている先
/var/spool/postfix/incoming リモート受信した最新のメッセージ格納 /var/spool/postfix/active 処理中メッセージ /var/spool/postfix/bounce 配信できなかったメールID毎のログ /var/spool/postfix/corrupt postfixの形式に則ってないメッセージ格納
/var/spool/postfix/deferred 配信不能だがリトライする。 /var/spool/postfix/hold 無期限保存する際利用 /var/spool/postfix/defer 一時的に配送不能なメッセージリトライする。
既に、 /var/spool/mail/配下の指定アドレスの中身は処理済みの場合、
問題は、
deferredとdeferに残骸が有ると、何度もリトライを繰り返してしまう点にある。
そこで、 defer配下をfindしてファイルサイズ2kのものをxargsで渡して削除
# find /var/spool/postfix/defer/ -size 2k | xargs rm -rf
マジで全部消えるので、ほんとにそのサイズで大丈夫か?を確認すること
※ -execだとファイルの数だけコマンドを投げる仕様のようで、時間がかかってしまう。
今回1万数千回の実行は xargs の方が向いている。
同様に、deferredでも行う。
# find /var/spool/postfix/deferred/ -size 2k | xargs rm -rf
その後、 残った問題の無いものを強制送信。
# postfix flush
最後にキューをきれいにする
# postsuper -d ALL
キューがきれいになったか確認
# postqueue -p Mail queue is empty
これで、正常な状態に戻っている(はず)
小生の環境では、これで正常に配信されるようになった。
この方の解説が非常にわかりやすかった。ありがとうございます。
kazupon.com様