我正在尝试监视日志文件的任何新输出。另一个脚本(不在我的控制之下)正在删除该文件,然后创建一个同名的新文件。使用tail -f
不起作用,因为文件正在被删除。
答案1
如果您tail
支持,请使用tail -F
,它可以很好地处理消失和重新出现的文件。只需确保您tail
从一个将保留在原处的目录开始即可。
-F
是 的简写--follow=name --retry
:tail
将按名称而不是文件描述符跟踪文件,并在文件无法访问时重试(例如因为它们已被删除)。
(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 以适应重命名、删除和创建的方式跟踪命名文件。