多数のログメッセージをダンプするアプリケーションがあります。このログの真ん中の部分、つまりイベントへの反応を捉えたいです。
これを試しました:
tmpfile=`mktemp`
tail -n1 -f appA_log_file.txt >> $tmpfile &
appB_sends_events_to_appA
sleep 1
pkill tail
cat $tmpfile
rm $tmpfile
このスクリプトは機能します。しかし心配ですsleep 1
。tail
巨大なログの変更を確認し、それを一時ファイルに書き込む必要があります。それがなければ、実行直前に1行だけ見えますappB
。
tail
バッファ内の内容を強制的にフラッシュするか、まだ読み取らずに終了する方法はありますかpkill
?
以下を試してくださいstdbuf
。
stdbuf -i0 -o0 tail -n1 -f appA_log_file.txt >> $tmpfile &
しかし、まだsleep
beforeが必要ですpkill
。
それとも、問題全体を解決するより良い方法はありますか?
答え1
さて、トラブルシューティングの鍵は-s0
。tail
代わりに、以下を試してください。
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
それは素晴らしい作品です。