Назад | Перейти на главную страницу

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

CENTOS 5.x | Отправить почту

Всем привет,

Надеюсь, это простой вопрос. =) Мне нужно создать сводку отчетов о сообщениях, которые инициировали определенный код DSN. Например:

Jan 11 07:43:34 server-example sendmail[12732]: p937blksdh3: to=<someuser@recipientdomain.com>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=102537, relay=mta.recipientdomain.com. [12.34.56.78], dsn=5.7.1, stat=Service unavailable

Обычно я просто ищу эту информацию с помощью grep (что-то вроде: grep -i "dsn = 5.7.1" / var / log / maillog). Но проблема в том, что это возвращает только строку, подобную приведенной выше, и не сообщает мне отправителя сообщения.

В идеале я ищу однострочник, который может делать следующее:

  1. Найдите в почтовом журнале sendmail конкретный DSN.
  2. Определите идентификатор сообщения для электронной почты. (Я догадываюсь awk '{print $}' будет использоваться?)
  3. Верните сведения о сообщении для каждого (предположительно grepping для идентификатора сообщения, полученного на шаге 2).

Я новичок в написании сценариев / однострочников, поэтому я уверен, что, вероятно, есть более простой способ сделать это. Есть предположения?

Спасибо,

-M

Следующее будет искать ваш dsn, и если он соответствует dsn = 5.7.1, он напечатает msg-id и отправителя:

awk '{if($13 ~ /dsn\=5\.7\.1/)print $11 $7}' < /var/log/maillog

Я не совсем уверен, какие конкретные данные вы пытаетесь извлечь, кроме идентификатора сообщения и отправителя, но вы можете переключить print $11 $7 полей (11 долларов 7 долларов) путем ручного подсчета полей, разделенных пробелом, чтобы выбрать то, что вы хотите.

Это то, что вам было нужно?

Эрик

Не очень эффективно (2 сканирования файла журнала), но должно помочь:

awk '/dsn=5.7.1/ {print $ 6}' / var / log / maillog | во время чтения ID; сделать awk "/$ID.*from=/ {print \ $ 7}" / var / log / maillig; сделано