Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Советы и секреты

Имеется ряд вещей, которые Вы можете использовать, чтобы сделать управление sendmail более эффективным. Ряд инструментальных средств управления обеспечивается пакетом sendmail.

Управление почтовой очередью

Почтовая очередь хранится в каталоге /var/spool/mqueue. Программа sendmail обеспечивает средства показа форматируемого списка всех помещенных в очередь сообщений почты и их состояния.

Команда /usr/bin/mailq ведет себя идентично:
# sendmail -bp
Вывод отображает message ID, размер, время помещения в очередь, кто послал письмо и сообщение, указывающее текущее состояние. Следующий пример показывает сообщение почты, увязшее в очереди с проблемой:
$ mailq
                Mail Queue (1 request)
--Q-ID-- --Size-- -----Q-Time----- ------------Sender/Recipient------------
RAA00275      124 Wed Dec  9 17:47 root
                 (host map: lookup (tao.linux.org.au): deferred)
                                   terry@tao.linux.org.au
Это сообщение все еще в очереди почты потому, что IP-адрес хоста назначения пока не нашелся.

Мы можем вынуждать sendmail начать обрабатывать очередь немедленно командой /usr/bin/runq.

Команда runq не производит вывода. sendmail начнет обрабатывать очередь почты в фоне.

Как заставить удаленный хост обрабатывать почтовую очередь

Если Вы используете временное подключение к Internet по модему с фиксированным (fixed) IP-адресом и полагаетесь на MX-хост для сбора почты в то время, когда соединение не установлено, Вы найдете очень полезной возможность вынудить MX-хост обрабатывать очередь почты после того, как Вы устанавливаете связь.

Маленькая программа на языке perl включена в пакет sendmail именно для этого. Скрипт etrn имеет тот же эффект на удаленном хосте, какой команда runq имеет на Вашем. Если мы вызываем команду etrn, как показано в этом примере:
# etrn vstout.vbrew.com
то хост vstout.vbrew.com будет обрабатывать любую почту, поставленную в очередь для нашей локальной машины.

Обычно стоит добавить эту команду к скрипту PPP ip-up, чтобы она была выполнена сразу после того, как сетевое подключение будет установлено.

Анализ почтовой статистики

Пакет sendmail собирает данные относительно объемов передачи почты и некоторую информацию относительно хостов, которым она была доставлена. Там есть две команды, чтобы отображать эту информацию: mailstats и hoststat.

mailstats

Команда mailstats отображает статистику по объему почты, обработанной sendmail. Время, за которое была собрана информация, печатается в начале, за ним следует таблица с одной строкой для каждого конфигурированного транспорта и одной, показывающей общее количество всей почты. Каждая строка представляет восемь элементов:
Поле Значение
M Транспортный протокол
msgsfr Число принятых сообщений
bytes_from Объем принятой почты в килобайтах
msgsto Число переданных сообщений
bytes_to Объем передаиной почты в килобайтах
msgsreg Сколько сообщений отклонено
msgsdis Сколько сообщений пропущено
Mailer Имя транспортного агента
Образец вывода команды mailstats показан в примере 18-5.

Пример 18-5. Образец вывода команды mailstats


# /usr/sbin/mailstats
Statistics from Sun Dec 20 22:47:02 1998
 M   msgsfr  bytes_from   msgsto    bytes_to  msgsrej msgsdis  Mailer
 0        0          0K       19        515K        0       0  prog
 3       33        545K        0          0K        0       0  local
 5       88        972K      139       1018K        0       0  esmtp
=============================================================
 T      121       1517K      158       1533K        0       0
Эти данные будут собраны, если опция StatusFile в sendmail.cf включена и файл состояния существует. Обычно Вы добавили бы следующее к sendmail.cf:
# status file
O StatusFile=/var/log/sendmail.st
Для перезапуска сбора статистики, Вы должны обнулить файл статистики:
> /var/log/sendmail.st
и перезапустить пакет sendmail.

hoststat

Команда hoststat отображает информацию относительно состояния хостов, которым sendmail попытался доставить почту. Вызов hoststat эквивалентен вызову:
sendmail -bh

Вывод представляет каждый хост на своей строке, и для каждого указывается время доставки почты и ее состояние.

Пример 18-6 показывает образец вывода команды hoststat. Обратите внимание на то, что большинство результатов указывают на успешную доставку. Результат для earthlink.net, с другой стороны, указывает на то, что доставка была неудачна. Сообщение состояния может иногда помочь определить причину сбоя. В этом случае, подключение было закрыто по окончании тайм-аута потому, что хост был выключен или недоступен.

Пример 18-6. Образец вывода команды hoststat

# hoststat
-------------- Hostname ---------- How long ago ---------Results---------
 mail.telstra.com.au                    04:05:41 250 Message accepted for
 scooter.eye-net.com.au              81+08:32:42 250 OK id=0zTGai-0008S9-0
 yarrina.connect.com.a               53+10:46:03 250 LAA09163 Message acce
 happy.optus.com.au                  55+03:34:40 250 Mail accepted
 mail.zip.com.au                        04:05:33 250 RAA23904 Message acce
 kwanon.research.canon.com.au        44+04:39:10 250 ok 911542267 qp 21186
 linux.org.au                        83+10:04:11 250 IAA31139 Message acce
 albert.aapra.org.au                    00:00:12 250 VAA21968 Message acce
 field.medicine.adelaide.edu.au      53+10:46:03 250 ok 910742814 qp 721
 copper.fuller.net                   65+12:38:00 250 OAA14470 Message acce
 amsat.org                            5+06:49:21 250 UAA07526 Message acce
 mail.acm.org                        53+10:46:17 250 TAA25012 Message acce
 extmail.bigpond.com                 11+04:06:20 250 ok
 earthlink.net                       45+05:41:09 Deferred: Connection time
Команда purgestat сбрасывает собранные статистические данные и является эквивалентной вызову:
# sendmail -bH

Статистика продолжит расти, пока Вы не очистите (сбросите) ее. Вы могли бы периодически выполнять команду purgestat, чтобы искать недавние записи, особенно, если Вы имеете сильно загруженный сайт. Вы могли бы поместить команду в файл crontab, чтобы очистка статистики выполнялась автоматически, или делать это только непосредственно.