Перевод выполнен Алексеем Паутовым в рамках некоммерческого проекта RussianLDP (http://www.rldp.ru/). Именно на этом сайте и надлежит искать новые версии, если таковые будут.

49. Утилиты exim

Множество скриптовых утилит и программ поставляются с exim и описано в этой части. Также есть Exim Monitor, который описыватся в следующей части. Описанные утилиты таковы:

Другая утилита, которая могла бы использоваться на сайтах со многими MTA, exilog. Он обеспечивает визуализацию протоколов от многих серверов exim. Для деталей смотрите http://duncanthrax.net/exilog/.

49.1. Поиск, что делают процессы exim (exiwhat)

На операционных системах, которые могут перезапускать системные вызовы после получения сигнала (большинство современных OS), процесс exim отвечает на сигнал SIGUSR1 путём записи строки описывающей, что он делает, в файл exim-process.info в каталоге спула exim. Скрипт exiwhat посылает сигнал всем процессам exim, которые он находит, вначале очистив файл. После чего он ждёт секунду, чтобы позволить процессам отреагировать до отображения результатов. Для успешного управления exiwhat Вы должны обладать достаточными привилегиями для посылки сигнала процессам exim, таким образом, обычно он запускается от имени root.

Предупреждение: это неэффективный процесс. Он предназначен для редкого использования администраторами системы. Неразумно, например, настраивать скрипт, который через короткие периоды посылает процессам exim сигнал SIGUSR1.

К сожалению, команда ps, которую exiwhat использует для нахождения процессов, различна в разных операционных системах. Мало того, что используются различные опции, но и формат вывода различен. Для этого есть некоторые системные конфигурационные опции, которые настраивают то, как работает exiwhat. Если Вам кажется, что он не работает, проверьте следующие компиляционные опции:

Пример типичного вывода exiwhat:
164 daemon: -q1h, listening on port 25
10483 running queue: waiting for 0tAycK-0002ij-00 (10492)
10492 delivering 0tAycK-0002ij-00 to mail.ref.example
   [10.19.42.42] (editor@ref.example)
10592 handling incoming call from [192.168.243.242]
10628 accepting a local non-SMTP message

Первое число в строке вывода задает номер процесса. Третья строка была разделена, чтобы уместиться на странице.

49.2. Селективный просмотр очереди (exiqgrep)

Эта утилита является скриптом на Perl, предоставленный Matt Hubbard. Он запускает:
exim -bpu
для получения списка очереди, содержащего лишь недоставленных получателей, а затем выбирает из вывода сообщения, которые совпадают с заданными критериями. Доступны следующие опции выбора:

Следующие опции управляют форматированием вывода:

Есть ещё одна опция, -h, которая выводит список всех опций.

49.3. Подведение итогов очереди (exiqsumm)

Утилита exiqsumm представляет собой скрипт на perl, который читает вывод exim -bp и выполняет сложение сообщений в очереди. Таким образом, Вы можете использовать его путём запуска такой команды:
exim -bp | exiqsumm

Вывод состоит из одной строки для каждого домена, который имеет ожидающие сообщения, как в следующем примере:
3   2322   74m   66m  msn.com.example

Каждая строка перечисляет висящие доставки для домена, их полный объём и отрезки времени, которые ожидают самое старое и самое новое сообщения. Отметьте, что число зависших доставок больше, чем число сообщений, когда сообщения имеют более одного получателя.

Итоговая строка выводится в конце. По умолчанию вывод сортируется по доменному имени, но exiqsumm обладает опциями -a и -c, вызывающих сортировку вывода по наиболее старым сообщениям и по счётчику сообщений соотвественно.

Вывод exim -bp содержит оригинальные адреса в сообщении, таким образом, он также применяется к выводу exiqsumm. Домены, сгенерированные из адресов в результате алиасинга или форвардинга, не включаются (если не использовалась опция one_time роутера redirect для конвертации в адреса верхнего уровня).

49.4. Извлечение специфической информации из протокола (exigrep)

Утилита exigrep представляет собой скрипт на perl, который ищет по одному или нескольким главным протоколам элементы, совпадающие с заданным шаблоном. Когда он находит совпадение, он извлекает все записи протоколов для уместного сообщения, а не только совпавшие с шаблоном. Таким образом, exigrep может извлекать полный протокол для заданного сообщения или всю почту для заданного пользователя, или для заданного хоста, например. Входные файлы должны быть в формате протоколов exim или syslog. Если совпадающие строки протоколов не ассоциируются с определённым сообщением, оно всегда включаются в вывод exigrep. Использование:
exigrep [-l] [-t n] pattern [log file] ...

Аргумент -t определяет число секунд. Он добавляет дополнительное условие для выбора сообщения. Сообщения, которые являются полными, показываются, лишь если они провели в очереди более, чем n секунд.

Флаг -l представляет собой буквальный флаг для обработки всех символов шаблона, как они есть. Иначе шаблон должен быть регулярным выражением perl. Сравнение шаблона нечувствительно к регистру. Если в командной строке не задано имя файла, читается стандартный ввод.

Если местоположение команды zcat известно из определения ZCAT_COMMAND в Local/Makefile, exigrep автоматически передаёт файлы, чьи имена заканчиваются на COMPRESS_SUFFIX, через zcat и затем ищет.

49.5. Отбор сообщений по различным критериям (exipick)

Утилита John Jetmore exipick включена в дистрибутив exim. Она выводит список сообщений из очереди, согласно разнообразным критериям. Для получения подробностей запустите:
exipick --help

49.6. Ротация файлов протоколов (exicyclog)

Скрипт exicyclog может быть использован для ротации протоколов mainlog и rejectlog. В этом нет необходимости, лишь если используется syslog, или Вы используете файлы протоколов со штампом даты в их именах (смотрите раздел 48.3). Некоторые операционные системы имеют собственные стандартные механизмы для ротации протоколов, и, если предпочитаете, они могут использоваться вместо exicyclog. Есть два варианта опций командной строки для exicyclog: