
Ich verwende den folgenden Befehl, um die Exim-Mail-Warteschlangen zu löschen
exiqgrep -i | xargs exim -Mrm
oder
# following commands seems to work faster compared to the above.
exim -bpru | awk {'print $3'} | xargs exim -Mrm
Die obigen Befehle funktionieren jedoch nicht, wenn die Mail-Warteschlangengröße 100.000 überschreitet. Sie bleiben hängen. Daher verwende ich das folgende Skript, das unabhängig von der Anzahl der Mails in der Warteschlange einwandfrei funktioniert.
Meine Frage ist: Wird es korrekt gelöscht?
/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
Antwort1
Ich glaube, Sie suchen das hier …
service exim stop
rm -fvr /var/spool/exim/input
service exim restart
Eine etwas vernünftigere Methode besteht jedoch darin, die Nachrichten für jeden Benutzer einzeln zu entfernen ...
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
Antwort2
Mit dem Folgenden hatte ich Erfolg, selbst wenn sich Millionen von E-Mails in der Warteschlange befanden.
for i in $(exim -bp | awk '{print $3}'); do exim -Mrm $i; done
Antwort3
So löschen Sie außerdem die E-Mails eines bestimmten Benutzers:
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
Antwort4
Um alle Nachrichten aus der Warteschlange zu entfernen, geben Sie Folgendes ein:
# exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | bash