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