有时,邮件会卡在我的 Postfix 队列中,远程服务器会提示“连接过多,速度慢”。我已经将特定域的 Postfix 配置为每秒仅发送一封邮件,但有时似乎不够。
我知道postqueue -f
,但它同时发送所有邮件,并且邮件以相同的状态保持在队列中。
我想一次刷新后缀队列中的一封邮件,比如说每秒一封邮件(或两封,或更多)。
答案1
可以刷新某封特定电子邮件,而不是整个队列。如果您依次对每封邮件执行此操作,并在每封邮件之间设置两秒钟的休眠时间,那么应该可以满足您的要求。
首先,您需要找到队列中邮件的队列 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
答案2
我的 awk 版本:
for mailid in `postqueue -p | awk '$1 ~ /^[0-9A-F]{11}$/ {print $1}'`; do postqueue -i $mailid; sleep 5; done;
答案3
通过在 sh 中使用管道,Awk 提案略有改进:
postqueue -p | awk '/^[0-9A-F]/{print "postqueue -i "$1 " ;sleep 2s"}' |sh