【问题标题】:need to grep a running log every 15 mins with a "keyword", but new lines should be checked every 15 mins it is grepping需要每 15 分钟使用“关键字”对运行日志进行一次 grep,但应每 15 分钟检查一次新行。
【发布时间】:2015-05-22 21:13:39
【问题描述】:

需要每 15 分钟使用“关键字”对运行日志进行一次 grep,但应每 15 分钟检查一次新行。它适用于 sun solaris,因此手表将无法工作。

例如 - 在第一次运行时,它应该使用关键字 grep 前 200 行。 对于下一次运行,它应该 grep 从 201 到 400 行等等。

【问题讨论】:

    标签: logging grep solaris tail


    【解决方案1】:

    如果您不想对 tail -f 的输出进行 grep,则必须记住上次 grep 时所在的位置。
    当您可以控制日志文件时,您有一些可能性:

    • 确保每一行都以时间戳开头;
      当有些行有而有些没有时,您可以使用 awk 选择日志文件的一部分
    • 将唯一标记附加到日志文件,使用 awk 和 grep 选择最后 2 个标记之间的日志;
    • 将日志文件移动到另一个位置(应用程序不应有打开的文件句柄);
      日志文件中只有最后 15 分钟
    • 在 grep 之后复制日志文件,下次 grep 从 2 个文件之间的差异中复制。
      当文件很大时,您可能会错过一些行。您需要一个额外的 tmp 文件来防止这种情况发生。

    只有时间戳是一个很好的解决方案,其他的都很丑。那么你还能做些什么呢?
    类似的东西

    LINECOUNTFILE=/var/tmp/mycount
    LOGFILE=/var/xxxx.log
    
    if [ -f ${LINECOUNTFILE} ]; then
       lastlinecount=$(cat ${LINECOUNTFILE})
    else
       lastlinecount=0
    fi
    if [ -f ${LOGFILE} ]; then
       newlinecount=$(cat ${LOGFILE} | wc -l)
       # Select a solution as described at 
       # http://unix.stackexchange.com/questions/47407/cat-line-x-to-line-y-on-a-huge-file
       echo TODO grep from the file between $lastlinecount and $newlinecount 
    else
       newlinecount=0
    fi
    echo ${newlinecount} > ${LINECOUNTFILE}
    

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2015-05-10
      • 2012-06-09
      • 2023-03-19
      • 2015-08-01
      相关资源
      最近更新 更多