`tail -f`の出力をファイルにフラッシュしますか?

`tail -f`の出力をファイルにフラッシュしますか?

多数のログメッセージをダンプするアプリケーションがあります。このログの真ん中の部分、つまりイベントへの反応を捉えたいです。

これを試しました:

tmpfile=`mktemp`
tail -n1 -f appA_log_file.txt >> $tmpfile  &
appB_sends_events_to_appA
sleep 1
pkill tail
cat $tmpfile
rm $tmpfile

このスクリプトは機能します。しかし心配ですsleep 1tail巨大なログの変更を確認し、それを一時ファイルに書き込む必要があります。それがなければ、実行直前に1行だけ見えますappB

tailバッファ内の内容を強制的にフラッシュするか、まだ読み取らずに終了する方法はありますかpkill

以下を試してくださいstdbuf

stdbuf -i0 -o0 tail -n1 -f appA_log_file.txt >> $tmpfile  &

しかし、まだsleepbeforeが必要ですpkill

それとも、問題全体を解決するより良い方法はありますか?

答え1

さて、トラブルシューティングの鍵は-s0tail

代わりに、以下を試してください。

echo '-start' >> appA_log_file.txt
appB_sends_events_to_appA
echo '-end' >> appA_log_file.txt
sed '/-start/,/-end/p' appA_log_file.txt

appAただし、ログを排他モードで保存してファイルにタグを挿入できないため、失敗します。

しかし、tail -s0 -fそれは素晴らしい作品です。

関連情報