Работа с очередью Exim
03 Aug 2009 | Автор: dd |Работая с Exim, постоянно наталкиваешься на какие то проблемы, когда письмо зависает в очереди, по тем или иным причинам, либо хост не доступен, либо криво настроены повторы и встает задача, что то сделать с зависшими сообщениями. Собственно ниже, о том как бороться с очередями Exim
Способы очистки очереди:
Наиболее прямолинейный и грубый прием, тем не менее позволяющий очистить очередь безусловно, но настоятельно не рекомендую его использовать:
rm -rf /var/spool/exim/input/*
Корректный способ, имеющий так же результатом полную очистку очереди сообщений:
service exim stop;
rm -rf /var/spool/exim/input.bak;
mv /var/spool/exim/input /var/spool/exim/input.bak;
mkdir /var/spool/exim/input;
chown mailnull.mail /var/spool/exim/input;
chmod 750 /var/spool/exim/input;
service exim start;
Официальный способ очистки очереди:
exim -qff
Тоже самое с включенным дебаггом процесса:
exim -qff -d9
Собственно все тоже самое можно проделать скриптом. Как условие- все исполняемые файлы должны быть прописаны полностью, и пользователь стартующий скрипт должен быть доверенным для Exim’а.
Также данный скрипт может помочь в ситуации когда после доставки сообщения Exim куда то девает телосообщения, в результате чего письмо становится гостом и в листинге очереди exim -bp объем не указывается, в результате чего exiqgrep, не понимая о чем речь, выпадает с ошибкой.
Собственно скрипт убивающий сообщения из очереди, но оговорюсь сразу- письма уходят навсегда.
#!/bin/bash
# Определяем qualify_domain — он необходим для удаления всяческого мусора
domain=`exim -bP | grep -i “^qualify_domain” | sed -e s/.*\=\ //g`
# Прощаемся со всеми замороженными сообщениями
exim -bpr | grep ‘<’ | awk ‘{print $2}’ | grep ‘-’ | xargs exim -Mrm 2> /dev/null
# при передаче скрипту параметра c, включаем агрессивный режим
if [ "$1" == "c" ]; then
# Удаляем все баунсы старше 20 минут
exiqgrep -o 1200 -if ‘^<>$’ |xargs exim -Mrm
# Сносим все сообщения с адресами начинающихся со спец.символов, таких как нижний подчерк, минус или тире
exiqgrep -f ‘^<\_|^<\-|^<\|’ -i | xargs exim -Mrm exiqgrep -r ‘^\_|^\-|^\|’ -i | xargs exim -Mrm
#Выкашиваем сообщения отправленные на китайские домены, за последние 20 минут
exiqgrep -f “$domain” -r ‘.cn$’ -o 1200 -i | xargs exim -Mrm
# Удаляем любые сообщения отправленные скриптами, если они зависли в очереди более чем на 12 часов
exiqgrep -f “$domain” -o 43200 -i | xargs exim -Mrm exit fi
# В мягком режиме удаляем только frozen баунсы и письма с невозможными адресами в заголовках
exiqgrep -zif ‘^<>$’ |xargs exim -Mrm
exiqgrep -f ‘^<\_|^<\-|^<\|’ -i | xargs exim -Mrm exiqgrep -r ‘^\_|^\-|^\|’ -i | xargs exim -Mrm
##### Работа с очередью Exim.
Когда возникает необходимость удалить одно или несколько замороженных сообщений из очереди, мы прибегаем к утилите Exipick:
exipick – показывает сообщения в очереди экзима
exipick -z – показывает замороженные сообщения
exipick -i – показывает ID сообщений
exim -Mrm ID – удаляет из очереди сообщение с определенным ID
В итоге получаем:
//очистит все замороженные сообщения из очереди
exipick -zi | xargs exim -Mrm
//очистит все сообщения из очереди
exipick -i | xargs exim -Mrm
// Очистка почтовой очереди в MTA Exim.
exipick -i | xargs exim -Mg
Сервер пытается немедленно доставить все письма, находящиеся в очереди. Если какое-либо письмо не удалось доставить, оно удаляется из очереди.
Работа с очередью Exim,Теги: exim, почтовые системы
1 Trackback(s)