Назад | Перейти на главную страницу

Как очистить очередь постфикса по одному письму за раз?

Иногда письма застревают в моей очереди postfix, когда удаленный сервер говорит: «Слишком много соединений, замедление». Я уже настроил свой постфикс для определенных доменов, чтобы отправлять только одно письмо в секунду, но иногда этого кажется недостаточно.

я знаю postqueue -f, но он отправляет все письма одновременно, и письма остаются в очереди с тем же статусом.

Я хотел бы очистить очередь постфикса по одному письму за раз, скажем, одно письмо каждую секунду (или 2, или больше).

Можно очистить одно конкретное письмо, а не всю очередь. Если вы сделаете это для каждого сообщения по очереди, с двухсекундным сном между сообщениями, это должно сделать то, о чем вы просите.

Во-первых, вам нужно найти идентификаторы очередей писем в очереди. Вы можете получить это с помощью команды postqueue -p. Вот пример вывода:

-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
6777D6E1E      3517 Mon Jan 25 03:03:02  sender@example.se
                                         recipient@example.com

69F6471CA      2820 Tue Jan 26 03:24:17  sender@example.se
                                         recipient@example.net

Все, что вам нужно, находится в первом столбце. Вы можете получить все идентификаторы, пропустив конвейер через grep и вырезав, например:

[jenny@sameen ~]$ postqueue -p | grep -v ^- | grep -v "(" | cut -d' ' -f1 |grep -e [[:alnum:]]
6777D6E1E
69F6471CA

Теперь, когда вы знаете, как получить идентификаторы, вы можете бросить их в цикл 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