Postfix
如何清除/重置 Postfix 隊列
我最近發現我們的一個 Ubuntu 伺服器每分鐘生成數十封通知電子郵件,並限制了它與少數其他伺服器共享的 Office 365 中繼帳戶。我停止了該伺服器上的 Postfix 服務並禁用了生成所有這些警報(以及隨後的傳遞失敗消息的級聯)的腳本。但是,我沒有考慮 Postfix 隊列管理器,它保留了數千條這樣的消息,並在我重新啟動 Postfix 時嘗試再次發送它們。
我第一次嘗試清除隊列是笨拙的,是導航到隊列目錄
/var/spool/postfix
並手動從“活動”和“傳入”文件夾中刪除文件。但是,當我執行postqueue -p
大量電子郵件時,隊列中仍然出現。完全重置或清除 Postfix 隊列的最佳方法是什麼?
您應該使用該
postsuper
命令從 Postfix 隊列中刪除消息 - 該-d <queueid>
選項將刪除具有指定隊列 ID 的消息。我正在使用類似這個腳本的東西來遍歷郵件隊列中的所有消息:
mailq | awk '$7~/@/{print$1}' | while read qid; do postsuper -d $qid; done
由於您直接弄亂了隊列的文件,您可能需要發出
postsuper -p
.-p 清除系統或軟體崩潰後遺留的舊臨時文件。
幾年前,a 寫了一個小腳本來更好地處理 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 "Unknown option $1" >&2 exit 1;; esac