我正在使用带有选项的 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 不起作用,是否还有其他替代方案(例如使用more
或less
)?
更新:
-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 的版本。