连续读取 bash 脚本中日志文件的最后一行
Continuously read the last line of log file in bash script
我有一个不断写入新行的日志文件。
我想要一个 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
这正是发明 tail -f
的原因:
tail -f <logfile>
将显示日志文件的最后一行,因此您可以关注添加的内容。
这可以与 grep
组合:
tail -f <logfile> | grep <text_to_be_searched>
你的情况:
tail -f file.log | grep "ERROR"
我有一个不断写入新行的日志文件。
我想要一个 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
这正是发明 tail -f
的原因:
tail -f <logfile>
将显示日志文件的最后一行,因此您可以关注添加的内容。
这可以与 grep
组合:
tail -f <logfile> | grep <text_to_be_searched>
你的情况:
tail -f file.log | grep "ERROR"