我正在运行一个脚本来按照下面的代码片段跟踪日志文件。我遇到了一个问题,当几行几乎同时写入日志文件时,传递到 $line 的行从一开始就丢失了许多字节。
我可以稍后检查该文件,并看到文件中的有问题的行是完整的,那么为什么它在脚本中不完整。也许是某种缓冲问题?
处理有时可能需要几秒钟才能完成,这会产生影响吗?
#!/bin/bash
tail -F /var/log/mylog.log | while read line
do
log "$line"
ffmpeg -i "from.wav" "to.mp3"
done
文件中的整行
"12","","765467657","56753763","test"
记录 $line 的示例
657","56753763","test"
更新 我对代码进行了更多调试,看来导致问题的处理是对用于将 wav 转换为 mp3 的 ffmpeg 的调用。如果我只用 sleep 来代替它,那么问题就会消失。 ffmpeg 会以某种方式影响缓冲区吗?
最佳答案
如果您使用的平台具有相当新的 GNU Coreutils 版本(例如任何相当新的 Linux 发行版),您可以使用 stdbuf
强制行缓冲。
stdbuf
manpage中的示例高度相关:
tail -f access.log | stdbuf -oL cut -d ' ' -f1 | uniq
这将立即显示 access.log 中的唯一条目
关于bash - 使用 ffmpeg 转换文件时跟踪日志文件并处理每一行丢失的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916515/