需要使用“关键字”每隔15分钟grep一个运行日志,但是应该每隔15分钟检查一次新行

时间:2015-03-19 16:25:41

标签: logging grep solaris tail

需要每隔15分钟使用“关键字”grep一个正在运行的日志,但是应该每隔15分钟检查一次新行。它适用于太阳能,因此手表不起作用。

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

1 个答案:

答案 0 :(得分:0)

如果你不想gre-tail -f的输出,你必须记住你最后一次上where的位置。
当您可以控制日志文件时,您有一些可能性:

  • 确保每一行都以时间戳开头;
    当某些行有,有些行没有时,可以使用awk选择日志文件的一部分
  • 在日志文件中附加一个唯一标记,用awk和grep选择最后两个标记之间的日志;
  • 将日志文件移动到另一个位置(应用程序不应该有一个打开的文件句柄);
    你将只在logfile中持续15分钟
  • 在grep之后复制日志文件,然后从2个文件之间的diff中复制grep 当文件很大时,您可能会错过一些行。你需要一个额外的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}