這是清除 exim 郵件佇列的正確方法嗎?

這是清除 exim 郵件佇列的正確方法嗎?

我使用以下命令刪除 exim 郵件佇列

exiqgrep -i | xargs exim -Mrm

或者

# following commands seems to work faster compared to the above.
exim -bpru | awk {'print $3'} | xargs exim -Mrm

但當郵件佇列大小超過100,000時,上述指令不起作用。它被卡住了。因此,我使用以下腳本,無論佇列中的郵件數量如何,該腳本都可以正常工作。

我的問題是,它會正確刪除嗎?

/etc/init.d/exim stop;
sleep 10;
killall -9 exim eximd
sleep 5;

#clean out the mail queue
find /var/spool/exim -mindepth 2 -type f -exec rm -rfv {} \;

#clean out the mail db files
find /var/spool/exim/db -type f -exec rm -rvf {} \;

/etc/init.d/exim restart

答案1

我相信你正在尋找這個...

service exim stop
rm -fvr /var/spool/exim/input
service exim restart

然而,一個稍微更明智的方法是根據每個用戶刪除訊息...

egrep -Rl "((`pwd | cut -d / -f3`|$(grep `pwd | cut -d / -f3` /etc/userdomains | cut -d : -f1 | tr '\n' '|' | sed 's/|$//g'))|/home/`pwd | cut -d / -f3`)|X-Failed-Recipients" /var/spool/exim/input --include='*-H' | awk -F "/" '{gsub("-[A-Z]$","");print$NF}' | xargs exim -Mrm 

答案2

即使隊列中有數百萬封電子郵件,我也取得了以下成功。

for i in $(exim -bp | awk '{print $3}'); do exim -Mrm $i; done

答案3

此外,要刪除特定使用者的電子郵件:

grep -lr '[email protected]' /var/spool/exim/input/ | \
    sed -e 's/^.*\/\([a-zA-Z0-9-]*\)-[DH]$/\1/g' | \
    xargs exim -Mrm

exim -bp | \
    grep "user_email-account" | \
    awk '{print $3}' | \
    xargs exim -Mrm

答案4

若要從佇列中刪除所有訊息,請輸入:

# exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | bash

相關內容