web-dev-qa-db-ja.com

一度に1つのメールをPostfixキューをフラッシュする方法は?

ときどき、メールが私のpostfixキューに残ったままになり、遠くのサーバーが「接続が多すぎて遅くなる」と言っています。特定のドメインのPostfixを1秒あたり1通のメールしか送信しないように設定しましたが、不十分な場合があります。

知っているpostqueue -f、ただし、すべてのメールを同時に送信し、メールは同じステータスでキューに残ります。

Postfixのキューを一度に1通ずつフラッシュしたいと思います。たとえば、毎秒1通(または2通以上)としましょう。

6
vincent.m

キュー全体ではなく、特定の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
7
Jenny D