2

ログ ファイルが大きくなるにつれてログ ファイルを追跡し、パターンを検索してそれに反応するループがあります。問題は、ループが入力を取得するのを遅らせるバッファにぶつかっていることtail -fですgrep

動作しません

while read l; do echo "l = |$l|"; done < <(tail -f $logfile | grep $pattern)

バッファがいっぱいになり、ループを介して行が一度に処理される前に、3〜4回(realfile.logは〜2K行です)セットアップ$logfileするfifo必要があります。cat realfile.log > $logfile

リダイレクトされた stdin からを削除するgrep $patternと、ファイルは期待どおりに処理されます。

動作します

while read l; do echo "l = |$l|"; done < <(tail -f $logfile)

また動作します

while read l; do echo "l = |$l|"; done < <(tail $logfile | grep $pattern)

それは書き込みでtailはありませんか?fsync()'ing-f

4

2 に答える 2

1

grep に行バッファリングを追加してみてください:

... grep --line-buffered $pattern ...
于 2013-10-15T15:25:10.607 に答える