将 `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 1。有必要tail注意到巨大日志中的变化并将其写入临时文件。如果没有它,我只能看到一行 - 就在 执行之前appB

有没有办法强制tail刷新缓冲区中的任何内容或尚未读取并退出pkill

尝试使用stdbuf

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

但它仍然需要一个sleepbefore 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效果很好。

相关内容