如何对每天滚动一次 500MB 的文件执行 tail -f 操作?

如何对每天滚动一次 500MB 的文件执行 tail -f 操作?

我想执行以下操作来监视日志文件中的模式:

tail -f ./app.log | grep "My Pattern: .*" >> ./MyPattern.txt &

这工作正常,直到app.log达到 500MB,它被移动到并创建app-2015-10-28.0.log一个新的。app.log当这种情况发生时,tail -f将停止工作。停止并再次运行相同的命令会起作用,但在停止和启动之间,重新启动之间出现的模式可能会丢失。

滚动的另一个条件是 00:00 时。即使日志小于 500MB,也会发生相同的滚动。

日志滚动是在应用程序级别完成的,我们无法控制该部分。

我们怎样才能检测到日志已经滚动,而不错过感兴趣的模式?

答案1

tail通常跟在文件描述符 ( --follow=descriptor) 后面,当日志文件滚动或文件被移走时,文件描述符将变得不可访问。从手册页中可以看到这一点tail

- 重试

即使文件无法访问或变得无法访问,仍继续尝试打开该文件;当按名称跟随时有用,即使用 --follow=name

所以像这样使用它(tail现在跟随名称而不是描述符):

tail --follow=name --retry logfile | grep "pattern"

当文件被截断或移走时,您将在 tails 输出中看到:

$ tail --follow=name --retry logfile
[...]
tail: logfile: file truncated
[...]
tail: `logfile' has become inaccessible: No such file or directory
tail: `logfile' has appeared;  following end of new file
[...]

相关内容