CENTOS 5.x | Sendmail
大家好,
我希望这是一个简单的问题。=) 我需要生成触发特定 DSN 代码的消息的报告摘要。例如:
Jan 11 07:43:34 server-example sendmail[12732]: p937blksdh3: to=<[email protected]>, 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)。但问题是,这只会返回像上面那样的一行,而不会告诉我消息的发件人。
理想情况下,我正在寻找可以执行以下操作的一行程序:
- 在 sendmail 邮件日志中搜索特定的 DSN。
- 识别电子邮件的消息 ID。(我猜awk'{打印$}'会被使用吗?
- 返回每个消息的详细信息(大概是从步骤 2 中检索到的消息 ID)。
我是脚本/单行程序方面的新手,所以我确信可能有更简单的方法可以做到这一点。有什么想法吗?
谢谢,
-M
答案1
以下将搜索您的 dsn,如果它匹配 dsn=5.7.1,它将打印 msg-id 和发件人:
awk '{if($13 ~ /dsn\=5\.7\.1/)print $11 $7}' < /var/log/maillog
我不太确定除了 msg-id 和 sender 之外您想要提取什么具体数据,但您可以print $11 $7
通过手动计算空格分隔的字段来切换字段($11 $7)以选择您想要的内容。
这就是你所追求的吗?
埃里克
答案2
效率不高(对日志文件进行了 2 次扫描),但应该可以解决问题:
awk '/dsn=5.7.1/ {print $6}' /var/log/maillog|while 读取 ID;执行 awk "/$ID.*from=/ {print \$7}" /var/log/maillig;完成