我有一个可以转储大量日志消息的应用程序。我想捕获该日志的中间部分,这是对事件的反应。
尝试过这个:
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
注意到巨大日志中的变化并将其写入临时文件。如果没有它,我只能看到一行 - 就在 执行之前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
效果很好。