如何使 tail 自动重新连接到已删除并重新创建的日志文件及其父目录

如何使 tail 自动重新连接到已删除并重新创建的日志文件及其父目录

我正在使用带有选项的 tail--follow=name来查看 servicemix 实例中的日志文件 (path = ${smx_home}/data/log/servicemix.log)。

ServiceMix 有一个“不错”的功能,可以在servicemix clean没有缓存的情况下重新启动干净,并且似乎它还删除了整个目录 ${smx_home}/data。

当文件夹和日志文件被删除时,出现消息:

tail: data/log/servicemix.log: No such file or directory

我必须按 ctrl-C 并重新启动我的 tail 命令,例如

tail --follow=name data/log/servicemix.log

问题的出现是因为 ServiceMix 的“干净启动”删除了整个目录,而不仅仅是文件和初始 inode 无效。

有没有办法让tail重新连接到删除的日志?

如果 tail 不起作用,是否还有其他替代方案(例如使用moreless)?

更新:

-F --follow我还测试了与和 的多种组合--retry

tail --follow=name --retry data/log/servicemix.log

这也不起作用。

我的尾部版本是

tail (GNU coreutils) 8.4

答案1

coreutils 8.26 之前的版本tail似乎无法继续删除文件夹中的文件。您可以使用less

less --follow-name +F data/log/servicemix.log

答案2

您将--retry选项添加到--follow=name.或者使用这个组合的简写-F。您将看到一个错误,表明 tail 丢失了文件,但它会在创建后在新目录中找到新文件。

检查您的手册页以获取完整信息。

答案3

请注意,对于某些特定版本的 tail,由于错误,这是不可能的。

一旦目录被删除,命令 tail 将无法再次连接回该文件。我之前能够在较旧的设置上重现此问题,但在我当前的版本上尝试上面的答案是有效的。因此,如果上面的答案不适合您,请检查 tail 的版本。

相关内容