tail -f 然后grep,处理缓存的问题

Posted stono

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tail -f 然后grep,处理缓存的问题相关的知识,希望对你有一定的参考价值。

学习了:http://www.quwenqing.com/read-134.html

对日志记录做多次grep过滤输出,格式如下:
tail -f log | grep xxx | grep yyy
发现grep失效,无法做正确输出。google研究了一下,原因如下:
管道 | 是全缓冲的,一般来说buffer_size为4096,有些是8192。不管具体值多少,只有buffer_size满了,才会看到输出。
在操作里  >>file 这个操作也是全缓冲的。调整如下
tail -f log | grep --line-buffer xxx | grep --line-buffer yyy
结果输出正常。
grep当带上了 --line-buffer 的时候,每输出一行,就刷新一次。
在unix里,块设备和普通文件,以及管道都是全缓冲的。

对日志分析告警和实时监控可以考虑如下形式:

tail -f $LOGF | while read var
do
case "$var" in
...
...
esac
done

 

以上是关于tail -f 然后grep,处理缓存的问题的主要内容,如果未能解决你的问题,请参考以下文章

05,文本处理cat more less head tail sort uniq wc tr grep cut jion sed awk ok

linux下日志文件的查找(tail和grep)

sed与grep

linux find grep tail

linux-grep-tail-find

grep 的管道不适用于尾部? [复制]