Работа с очередью 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

Сервер пытается немедленно доставить все письма, находящиеся в очереди. Если какое-либо письмо не удалось доставить, оно удаляется из очереди.

VN:F [1.9.21_1169]
Rating: 7.4/10 (14 votes cast)
VN:F [1.9.21_1169]
Rating: +3 (from 7 votes)
Работа с очередью Exim, 7.4 out of 10 based on 14 ratings

Теги: ,

  1. 1 Trackback(s)

  2. 11 Feb 2010: Всякие полезности для exim | Одминский блог

Ваш отзыв