Недавно я обнаружил, что один из наших серверов Ubuntu генерировал десятки уведомлений по электронной почте в минуту и регулировал учетную запись ретранслятора Office 365, которую он использовал совместно с несколькими другими серверами. Я остановил службу Postfix на этом сервере и отключил сценарии, которые генерировали все эти предупреждения (и последующий каскад сообщений об ошибках доставки). Однако я не учел диспетчер очереди Postfix, который сохранил тысячи этих сообщений и пытается отправить их снова, когда я перезапускаю Postfix.
Моя первая, по общему признанию, неуклюжая попытка очистить очередь заключалась в переходе к каталог очереди в / var / spool / postfix
и вручную удалите файлы из «активных» и «входящих» папок. Однако, когда я запустил postqueue -p
, в очереди все еще находилась тонна писем.
Как лучше всего полностью сбросить или очистить очередь Postfix?
Для удаления сообщений из очереди Postfix следует использовать команду postsuper
- -d
опция удалит сообщение с указанным идентификатором очереди.
Я использую что-то вроде этого скрипта для прохождения всех сообщений в почтовой очереди:
mailq | awk '$7~/@/{print$1}' | while read qid; do postsuper -d $qid; done
Поскольку вы напрямую испортили файлы очереди, вы можете выполнить команду 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