tail -f,但是当文件被删除并重新创建时(不附加)

tail -f,但是当文件被删除并重新创建时(不附加)

我正在尝试监视日志文件的任何新输出。另一个脚本(不在我的控制之下)正在删除该文件,然后创建一个同名的新文件。使用tail -f不起作用,因为文件正在被删除。

答案1

如果您tail支持,请使用tail -F,它可以很好地处理消失和重新出现的文件。只需确保您tail从一个将保留在原处的目录开始即可。

-F是 的简写--follow=name --retrytail将按名称而不是文件描述符跟踪文件,并在文件无法访问时重试(例如因为它们已被删除)。

(coreutils 8.26 中修复了许多--follow=name与 with相关的错误--retry,因此您可能会遇到早期版本的问题;例如当包含尾文件的目录被删除时重试似乎仅在版本 8.26 或更高版本的所有情况下都有效。)

答案2

看看你的 tail man 命令,有些有:

--follow=name

它指示tail监视名称,而不是默认情况下的描述符。使用这样的选项,如果文件被删除并重新创建,tail将看到它。正如手册中所写:

使用--follow (-f),tail 默认跟随文件描述符,这意味着即使重命名tail'ed 文件,tail 将继续跟踪其结尾。当您确实想要跟踪文件的实际名称而不是文件描述符(例如,日志轮转)时,这种默认行为是不可取的。在这种情况下使用 --follow=name 。这会导致 tail 以适应重命名、删除和创建的方式跟踪命名文件。

相关内容