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

Вопрос или проблема

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

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

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

Вы должны использовать команду postsuper для удаления сообщений из очереди Postfix – Опция -d <queueid> удалит сообщение с указанным идентификатором очереди.

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

mailq | awk '$7~/@/{print$1}' | while read qid; do postsuper -d $qid; done

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

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


Много лет назад я написал маленький скрипт для более удобной обработки некоторых случаев в очередях почты postfix, вместо простых одноразовых команд. Возможно, он будет вам полезен в будущем.

$ 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 "Неизвестная опция $1" >&2
                exit 1;;
esac

Для того чтобы очистить всю очередь почты Postfix, вы можете использовать следующую команду:

postsuper -d ALL

.

Ответ или решение

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

Теория

Postfix — это популярный агент пересылки электронной почты (Mail Transfer Agent, MTA), который широко используется в различных Unix-подобных операционных системах. Он отвечает за отправку и получение электронной почты и имеет систему очередей, через которые проходят все отправляемые и получаемые сообщения. В Postfix существуют различные типы очередей, такие как активная очередь, очередь входящих сообщений и т. д.

Одним из распространенных инструментов управления очередями является команда postsuper, которая позволяет выполнять различные операции с почтовой очередью. Наиболее частыми действиями с очередью являются:

  • Удаление сообщений: Использование postsuper -d <queue_id> для удаления конкретного сообщения по его идентификатору.
  • Проверка состояния очереди: С помощью команды postqueue -p можно просмотреть текущее состояние очереди и определить, какие сообщения в ней находятся.

Пример

В представленном случае изначально была предпринята попытка вручную удалить файлы сообщений из директорий в /var/spool/postfix, таких как ‘active’ и ‘incoming’. Однако это привело к тому, что очередь оставалась заполненной при проверке с помощью команды postqueue -p.

Более эффективным способом очистки бихqueue является использование postsuper. Например, команда postsuper -d ALL позволяет удалить все сообщения из очереди Postfix, полностью её очистив. Это решение подходит в случае, когда необходимо избавиться от большого количества сообщений, например, усыновившихся после сбоя в скриптах или из-за некорректной настройки.

Применение

Для вашего случая наилучшей практикой будет следующее:

  1. Остановите службу Postfix перед выполнением любых операций с очередью. Это предотвратит отправку сообщений во время их удаления.

    sudo systemctl stop postfix
  2. Очистите очередь целиком с помощью postsuper -d ALL. Это гарантирует, что все сообщения, включая возможные частично поврежденные сообщения или ненужные уведомления об ошибках, будут удалены.

    sudo postsuper -d ALL
  3. Проверьте наличие остаточных файлов и выполните чистку временных файлов. Это особенно важно, если вы уже пытались вручную удалять файлы из очереди.

    sudo postsuper -p
  4. Перезапустите службу Postfix, чтобы продолжить нормальную работу сервера.

    sudo systemctl start postfix
  5. Регулярно проверяйте логи и состояние почтовой очереди с помощью команд, таких как postqueue -p, для предотвращения повторения подобной ситуации.

В случае, если в будущем возникнут ситуации, когда нужно будет удалять определенные категории сообщений (например, от конкретного отправителя), можно использовать скрипты, работающие с выводом очереди. Пример такого скрипта предоставлен в описании задачи.

Выполнение этих шагов поможет вам содержать почтовую очередь в хорошем состоянии, минимизируя риск неправильной отсылки сообщений и обеспечивая надежное функционирование серверной инфраструктуры. Помните, что действие Postfix требует дисциплины и внимательного подхода, ведь работа с электронной почтой — это один из ключевых аспектов корпоративной ИТ-инфраструктуры.

Оцените материал
Добавить комментарий

Капча загружается...