По моим наблюдениям, когда sendmailовская очередь становится больше 1500 писем, начинаются сложности с пересылкой писем. Если почтовый трафик большой, постепенно это приводит к росту очереди, и когда писем становится больше 3000, очередь фактически умирает. После того как мы разобрались с причинами переполнения очереди. Будем спасать ситуацию. В первую очередь надо остановить sendmail.
# /etc/rc.d/sendmail stop
Теперь переместим очередь в другую директорию.
# cd /var/spool/
# mv mqueue mqueue.bak
Теперь создадим mqueue.
# mkdir mqueue
# chown root:daemon /var/spool/mqueue
Sendmail можно запустить. Пусть принимает новую почту и обрабатывает ее. Остается решить что делать со старой почтой.
# /etc/rc.d/sendmail start
Просмотреть содержимое очереди, сохраненной в другой директории, можно так:
# sendmail -O QueueDirectory=/var/spool/mqueue.bak/ -bp
Если очередь «великовата», выполнение этой команды, может занять очень много времени и ресурсов сервера.
Очередь сендмейла, одно сообщение, состоит из двух файлов.
Первый файл начинается на df, следом идет уникальный идентификатор сообщения, второй начинается на qf, и следует тот же идентификатор. df файлы это тело сообщения, qf – заголовок.
Если в очереди, которую мы сохранили – есть ненужные сообщения, можно попросту удалить эту пару файлов в соответствии с идентификатором. Таким образом мы очистим старую очередь от ненужных сообщений. Лучше всего это делать конечно с помощью скриптов. А нужные сообщения поставим на отправку. Для этого запустим отдельный sendmail:
# sendmail -O QueueDirectory=/var/spool/mqueue.bak/ -qf -v
Sendmail мы запустили с опцией -v, включили вербоуз, на экране будет отображаться процесс пересылки сообщения, весь SMTP диалог. При большой очереди – распинываниеочереди займет длительный промежуток времени. Но новые письма, которые только сейчас поступают в sendmail, в его основную очередь, будут отправляться без проблем.