1. 程式人生 > >tail -f 多次grep過濾輸出

tail -f 多次grep過濾輸出

對日誌記錄做多次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

http://www.quwenqing.com/read-134.html