¿Es una forma correcta de borrar la cola de correo exim?

¿Es una forma correcta de borrar la cola de correo exim?

Utilizo el siguiente comando para eliminar las colas de correo exim

exiqgrep -i | xargs exim -Mrm

o

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

Pero los comandos anteriores no funcionan cuando el tamaño de la cola de correo es superior a 100.000. Se queda atascado. Entonces, estoy usando el siguiente script que funciona bien independientemente de la cantidad de correos electrónicos en la cola.

Mi pregunta es, ¿se eliminará correctamente?

/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

Respuesta1

Creo que estás buscando esto...

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

Sin embargo, un método un poco más sensato es eliminar los mensajes por usuario...

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 

Respuesta2

He tenido éxito con lo siguiente, incluso cuando hay millones de correos electrónicos en cola.

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

Respuesta3

Además, para eliminar los correos electrónicos de un usuario específico:

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

Respuesta4

Para eliminar todos los mensajes de la cola, ingrese:

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

información relacionada