パイプテール、grep、カット問題のリアルタイムログチェック

パイプテール、grep、カット問題のリアルタイムログチェック

増えるログをリアルタイムで確認しなければならず、問題点を発見することになりました。逃す一部の行(正確にどの行なのか不明)は、または、およびtail -fを使用します。tailfgrepcut

grep特定の単語を含む行をフィルタリングし、cut -c -NUM一部の行が非常に長いため、端末ウィンドウで改行したくないので、これを使用します。

以下は、次のサンプルログを表示する最小限の例です。「ラインN」行、フィルタの単語「ワイヤー」、この場合、すべての行がありません(明らかに^Cプロセスを終了しました)。

$ tail -n 3 -f log

13th line
14th line
15th line
^C

$ tail -n 3 -f log | grep --color=never 'line'

13th line
14th line
15th line
^C

$ echo $COLUMNS

100

$ tail -n 3 -f log | grep --color=never 'line' | cut -c -$COLUMNS

^C

この問題が発生しています。tail -f(またはtailf)とのみgrep結合されます。cut。パイプのgrep真ん中や端に使用しないと、行はcut抜けません。またはtail -fに変更すると問題ありません。すべての可能な状況を見ることができます。tailcatこの長い例

Ubuntu 13.04を使用していますが、GNUコアツールtailcut)バージョン8.20およびGNU grep2.14。

答え1

あなたの例では、問題はとの間grepのバッファリングですcut。バッファがいっぱいになった場合にのみ、データはパイプの下に渡されます(私のシステムでは4kB)。

各行の後にバッファをフラッシュするように--line-buffered追加してみてください。grep

関連情報