2018/11/16

postfix メールキューのエラー 大量のメールを誤送信してしまい、遅延がひどい場合の措置

サーバ内のメール転送プログラム実行中にエラーが生じた際に、
エラー警告メールを送信し、エスケープする処理を盛り込んだのだが、
エスケープの記述をしくじり、エンドレス送信が生じてしまった。

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様

0 件のコメント:

コメントを投稿