08
Feb
2008
victor

Sobre cómo eliminar miles de mensajes rápidamente en Qmail

Ayer tuve un problema con un servidor dedicado en el que normalmente se usa Plesk para la configuración de los servicios de los dominios alojados en el mismo. Debido a una mala parametrización del servicio de correo (basado en Qmail) para los dominios, se acumularon en el servidor debido a la recepción de correo basura unos 30.000 mensajes (la mayoría eran "bounces" del servidor), con lo que empezó a notarse una excesiva lentitud en el servicio de correo.

Pero claro, en la cola de mensajes del servidor había mensajes que no se podían borrar, así que para ir borrando los mensajes que no interesaban (que eran miles), a falta de una interfaz apropiada en el Plesk tuve que recurrir a la línea de comandos.

Haciendo uso del qmHandle, una utilidad para gestionar la cola de mensajes del Qmail, y seleccionando los mensajes a borrar, fue posible borrar literalmente miles de mensajes en segundos y así aliviar la cola de mensajes del servidor, que aceleró el procesamiento del resto de mensajes.

Estos fueron los pasos que realicé:

  1. Usando el comando /var/qmail/bin/qmail-qread y su salida redirigida a un fichero obtengo la lista de mensajes actualmente en la cola
  2. Sobre este fichero aplico un grep para obtener los mensajes que me interesaba eliminar (por ejemplo, con remitente vacío) y con el comando cut me quedo sólo con el número de mensaje (la salida de este comando también redirigida a otro fichero). Sustituyendo el carácter "#" que precede a este número por los caracteres "-d" (el parámetro eliminar un mensaje en qmHandle)
  3. Finalmente ejecutamos un cat del fichero con los parámetros "-dXXXXXXXX" seguido de un pipe al comando "xargs /root/qmHandle/qmHandle" (la ubicación del qmHandle es arbitraria):

[root@host tmp] # cat mensajes_a_borrar.txt | xargs /root/qmHandle/qmHandle

De esta manera el qmHandle va parando el Qmail y en cada parada elimina el número máximo de mensajes que puede borrar de una vez. Así, como no es preciso parar y arrancar el Qmail para cada mensaje a eliminar el proceso de borrado de mensajes es mucho más rápido.