命令 tail -f 未按预期工作

时间:2021-02-08 15:00:14

标签: logging grep sh alpine tail

有一个日志文件,它不断地从本地服务器获取写入的行。

我想审核对该文件所做的任何更改,特别是对于术语重新启动。我试过这个:

while [ $(tail -f ../debug.log | grep -c "restarting") -eq 0 ]; do echo "Restart"; done

问题是 grep -c "restarting" 不返回任何内容,而 grep "restarting" 返回匹配的行。奇怪的是 cat 显示该行在那里,但 while 循环只是无限循环。怎么了?

此外,echo "Restart" 仅用于测试目的,最终我会pkill 处理并以代码 0 退出。

如果可以在后台运行 while 循环将是一个巨大的优势。

有人可以帮我解决这个问题吗?提前致谢!

1 个答案:

答案 0 :(得分:0)

请随时关闭此问题@EdMorton,因为您已经使用 awk 给出了答案。

我最终选择了 sed,并创建了一个名为 on_restart.sh 的文件:

#!/bin/sh
tail -f ../debug.log | sed -e '/process restarting/ q'
pkill -9 process; exit 0

在后台运行该文件就像./on_restart.sh &一样简单。