이것이 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

관련 정보