Скрипты чистки очереди QMAIL

Оригинал документа находится по адресу: http://www.unlocked.ru/readarticle.php?article_id=3


Предоставленные тут скрипты были придуманы в условиях ограниченного времени (нужно было быстро очищать забитую очередь). Также я никогда особо не занимался программированием, но даже на мой взгляд они немножко корявы. Выкладываю их сюда только для того, чтобы можно было понять идею. Использование этих скриптов может привести к нежелательным последствиям, будьте осторожны.

1. Удаление писем из очереди по теме сообщения - пример "failure notice" при помощи qmail-remove

-------------------------------------
#!/bin/sh
#STOP QMAIL
/usr/local/psa/rc.d/qmail stop
sleep 5;
#clean QUEUE
/usr/local/sbin/qmail-remove -q /usr/local/psa/qmail/queue -i -p "Subject: failure notice" -n 512 -d
sleep 1;
#START QMAIL
/usr/local/psa/rc.d/qmail start
sleep 1;
echo 'Deleted from queue'

Этот скрипт у меня выполняется каждую ночь по крону, иначе к концу срока хранения писем скапливается слишком много failure notice-ов, а удалять все письма раз в день - значит иногда удалять и нужные письма, которые просто застряли в очереди по тем или иным причинам.

2. Поиск и удаление писем из очереди по содержанию (в примере - viagra).
В этом скрипте также создаются файлы-логи. Если это лишнее, можно отработать без записи в файл - через сохранение в переменную.

#!/bin/sh
n=0
cd /usr/local/psa/qmail
messdirs=`echo queue/mess/* | wc -w`
while [ $n -lt $messdirs ]
do
grep "viagra" /usr/local/psa/qmail/queue/mess/$n/* | awk -F: '{print $1}' | awk -F/ '{print $9}' >>/home/spam.log
n=`expr $n + 1`
done


vars=`cat /home/spam.log`
/usr/local/psa/rc.d/qmail stop
sleep 5;

for i in $vars; do
find /usr/local/psa/qmail/queue/ -name $i -print | xargs rm;
sleep 1;
/usr/local/psa/rc.d/qmail start