连续读取bash脚本中日志文件的最后一行

我有一个日志文件,其中不断写入新行。

我想要一个 bash 脚本,它可以连续读取此日志文件的最后一行,以便我可以处理该行(例如,如果该行包含“错误”一词,则执行特定命令)。

我试过了:

while true
do
    if tail -n1 -f file.log | grep -q ERROR
    then
        echo "$(date) : ERROR detected"
    fi
done

但这是垃圾邮件:

sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected

(在这个例子中每分钟添加一个新行)

我怎样才能只阅读最后一行并且没有垃圾邮件的结果?

回答

我建议使用 GNU grep:

tail -n1 -f file.log | grep --line-buffered ERROR | while read; do echo "$(date) : ERROR detected"; done


以上是连续读取bash脚本中日志文件的最后一行的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>