Как очистить / сбросить очередь Postfix

Недавно я обнаружил, что один из наших серверов Ubuntu генерировал десятки уведомлений по электронной почте в минуту и ​​регулировал учетную запись ретранслятора Office 365, которую он использовал совместно с несколькими другими серверами. Я остановил службу Postfix на этом сервере и отключил сценарии, которые генерировали все эти предупреждения (и последующий каскад сообщений об ошибках доставки). Однако я не учел диспетчер очереди Postfix, который сохранил тысячи этих сообщений и пытается отправить их снова, когда я перезапускаю Postfix.

Моя первая, по общему признанию, неуклюжая попытка очистить очередь заключалась в переходе к каталог очереди в / var / spool / postfix и вручную удалите файлы из «активных» и «входящих» папок. Однако, когда я запустил postqueue -p , в очереди все еще находилась тонна писем.

Как лучше всего полностью сбросить или очистить очередь Postfix?

7
задан 22 December 2020 в 02:04
2 ответа

Для удаления сообщений из очереди Postfix следует использовать команду postsuper - -d опция удалит сообщение с указанным идентификатором очереди.

Я использую что-то вроде этого скрипта для прохождения всех сообщений в почтовой очереди:

mailq | awk '$7~/@/{print$1}' | while read qid; do postsuper -d $qid; done
6
ответ дан 4 January 2021 в 07:21

Поскольку вы напрямую испортили файлы очереди, вы можете выполнить команду postsuper -p .

-p Очистить старые временные файлы, которые остались после сбоя системы или программного обеспечения.


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

$ cat / usr / local / sbin / postclear

#!/bin/bash

usage() {
        echo "${0/*\/} --from <address1> [<address2> .. <addressN>]"
        echo "${0/*\/} --bounce <address1> [<address2> .. <addressN>]"
        echo "${0/*\/} --to <address1> [<address2> .. <addressN>]"
}

if [ $# -lt 2 ]; then
        usage 1>&2 ;
        exit 1;
fi


case $1 in
        --from )
                shift
                while (( $# )) ; do
                        postqueue -p | grep -e "$1" | grep -Eo '^[A-F0-9]+' | postsuper -d -
                        shift
                done
                exit;;
        --bounce )
                shift
                while (( $# )) ; do
                        postqueue -p | grep -E -B2 -e "$1" | grep MAILER-DAEMON | grep -Eo '^[A-F0-9]+' | postsuper -d -
                        shift
                done
                exit;;
        --to )
                shift
                while (( $# )) ; do
                        postqueue -p | grep -E -B2 -e "$1" | grep -Eo '^[A-F0-9]+' | postsuper -d -
                        shift
                done
                exit;;
        * )
                echo "Unknown option $1" >&2
                exit 1;;
esac
4
ответ дан 4 January 2021 в 07:21

Теги

Похожие вопросы