Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每小时统计日志文件中字符串的出现次数(使用shell脚本)_Shell - Fatal编程技术网

每小时统计日志文件中字符串的出现次数(使用shell脚本)

每小时统计日志文件中字符串的出现次数(使用shell脚本),shell,Shell,我想制作一个脚本来计算特定字符串(域名)的出现次数 从日志文件(邮件日志)每小时,以检查他们每小时发送多少封电子邮件 我知道有许多简单而不同的方法可以将脚本放入文件(如grep等) 并计算行数(如wc-l) 但我不知道每小时怎么做 是的,我可以通过cron作业每60分钟调用一次脚本,但这会从开始到脚本执行的那一刻读取日志文件..而不是过去60分钟内生成的行,我不知道如何克服这一点 注: 我正在使用的显示每个域发送的所有电子邮件的命令是: \# cat /usr/local/psa/var/log

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

我知道有许多简单而不同的方法可以将脚本放入文件(如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

问题的要点是:

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.
你怎么能解决这个问题

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

  • 我个人会选择方法2。它非常高效且易于实现。

    欢迎使用堆栈溢出。请在过久之前阅读这篇文章。您需要显示日志文件格式的一些行,以便时间信息可见。基本技术是创建一个模式,该模式匹配相关小时内的所有时间,但细节取决于日志文件中的日期格式。另外,您是否在日志文件中记录的所有时间内,在一个小时内进行分析?