ときどき、メールが私のpostfixキューに残ったままになり、遠くのサーバーが「接続が多すぎて遅くなる」と言っています。特定のドメインのPostfixを1秒あたり1通のメールしか送信しないように設定しましたが、不十分な場合があります。
知っているpostqueue -f
、ただし、すべてのメールを同時に送信し、メールは同じステータスでキューに残ります。
Postfixのキューを一度に1通ずつフラッシュしたいと思います。たとえば、毎秒1通(または2通以上)としましょう。
キュー全体ではなく、特定の1つの電子メールをフラッシュすることができます。メッセージごとにこれを順番に行い、メッセージ間に2秒のスリープがある場合は、要求どおりの動作をするはずです。
まず、キュー内のメールのキューIDを見つける必要があります。これは、postqueue -p
コマンドを使用して取得できます。次に出力例を示します。
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
6777D6E1E 3517 Mon Jan 25 03:03:02 [email protected]
[email protected]
69F6471CA 2820 Tue Jan 26 03:24:17 [email protected]
[email protected]
必要なのは最初の列です。次のようにgrepとcutをパイプすることですべてのIDを取得できます。
[jenny@sameen ~]$ postqueue -p | grep -v ^- | grep -v "(" | cut -d' ' -f1 |grep -e [[:alnum:]]
6777D6E1E
69F6471CA
IDを取得する方法がわかったので、いくつかのスリープでbashループにそれらを投げることができます。
[jenny@sameen ~]$ for ID in `postqueue -p | grep -v ^- | grep -v "(" | cut -d' ' -f1 |grep -e [[:alnum:]] `; do postqueue -i $ID; sleep 2; done