我有一个循环,它将随着日志文件的增长而跟踪它,搜索模式并对其做出反应。问题是我在某个地方遇到了一个缓冲区,该缓冲区延迟了循环获取输入,我相信这是由于tail -f
并将日志传输到grep
.
不工作
while read l; do echo "l = |$l|"; done < <(tail -f $logfile | grep $pattern)
我已经设置$logfile
为 afifo
并且必须进行cat realfile.log > $logfile
3 或 4 次(realfile.log 大约为 2K 行),然后缓冲区似乎已填满,并且这些行通过循环立即处理。
如果我grep $pattern
从重定向的标准输入中删除,该文件将按预期处理。
有用吗
while read l; do echo "l = |$l|"; done < <(tail -f $logfile)
也有效
while read l; do echo "l = |$l|"; done < <(tail $logfile | grep $pattern)
难道这tail
不是fsync()'ing
写在上面的-f
吗?