1

我想制作一个脚本来计算每小时从日志文件(邮件日志)中出现的特定字符串(域名),以检查他们每小时发送了多少封电子邮件。

我知道有许多简单而不同的方法可以将脚本查找到文件中(如 grep 等)并计算行数(如 wc -l),但我不知道如何每小时执行一次。

是的,我可以通过 cron 作业每 60 分钟调用一次脚本,但这会从头开始读取日志文件,直到脚本执行的那一刻......而不是过去 60 分钟内的行,我不知道如何克服这一点。

笔记:

我正在使用的命令显示每个域发送的所有电子邮件是:

\# cat /usr/local/psa/var/log/maillog | grep -i qmail-remote-handlers \
| grep from | awk {' print $6 '} | gawk -F@ '{ print $2 }' \
| sort | uniq -c | sort -n | tail

结果是这样的:

      8 domain1.tld
     45 domain34.tld
    366 domain80948.tld
etc etc
4

1 回答 1

0

问题的重点是这个:

Yes I can call the script every 60 minutes via a cron job but this would read the log file
from the beginning till the moment the script was executed..and not the lines made in the
last 60 minutes, and I don't know how to overcome this.

你怎么能解决这个问题?

  1. 您可以在处理它时保存日志文件中的行数。之后使用 . 跳过这些行sed
  2. 与 1 相同,但保存已处理文件中的字节数;然后使用 . 跳过它dd
  3. 您可以在处理后旋转(重命名)文件(此方法的缺点是您需要重新配置系统以进行日志处理)

我个人会选择方法2。它非常高效且实现起来非常简单。

于 2013-03-24T09:36:29.210 回答