如何清除/重置 Postfix 队列

Bea*_*e T 8 postfix ubuntu-18.04

我最近发现我们的一个 Ubuntu 服务器每分钟生成数十封通知电子邮件,并限制它与少数其他服务器共享的 Office 365 中继帐户。我停止了此服务器上的 Postfix 服务并禁用了生成所有这些警报(以及随后的传递失败消息的级联)的脚本。但是,我没有考虑 Postfix 队列管理器,它保留了数千条这样的消息,并在我重新启动 Postfix 时尝试重新发送它们。

我的第一个,诚然是笨手笨脚的,尝试清除队列是导航到队列目录,/var/spool/postfix并从“活动”和“传入”文件夹中手动删除文件。然而,当我运行postqueue -p大量电子邮件时,队列中仍然出现。

完全重置或清除 Postfix 队列的最佳方法是什么?

Gus*_*uss 8

您应该使用该postsuper命令从 Postfix 队列中删除消息 - 该-d <queueid>选项将删除具有指定队列 ID 的消息。

我正在使用类似这个脚本的东西来运行邮件队列中的所有消息:

mailq | awk '$7~/@/{print$1}' | while read qid; do postsuper -d $qid; done
Run Code Online (Sandbox Code Playgroud)

  • 这比 `-d ALL queuename ` 好在哪里? (5认同)
  • @anx 可能不是?我通常将此循环用于其他 - 更复杂的 - 操作,并且只是为此用途合作。 (2认同)

841*_*104 7

由于您直接弄乱了队列的文件,因此您可能需要发出postsuper -p.

-p 清除系统或软件崩溃后遗留的旧临时文件。


几年前,有人写了一个小脚本来更好地处理后缀邮件队列中的某些情况,而不是仅仅做临时的一个衬垫。您将来可能会发现它很有用。

$ 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
Run Code Online (Sandbox Code Playgroud)