tail -f 文件在重命名时停止拖尾

Psi*_*Psi 6 linux tail

我想提交tail -f文件,但在mv.

尾部手册页告诉我:-f手段--follow=descriptor因此mv不应该改变的inode?

为什么tail -f重命名后停止工作?

Gio*_*ani 3

读取tail源代码,看起来它在读取重命名的文件时没有失败,但在监视文件状态时失败。

更准确地说,tail似乎表现为这种(简化的)方式:

  1. 它读取文件到最后;
  2. 然后设置一个inotify监视,以便在文件发生问题时被注意到;
  3. 当新内容追加到文件中时,再次读取到末尾;
  4. 然后跳回步骤 2。

当您移动文件时,inotify通知tail,后者决定从受监视文件列表中删除该文件。这似乎是故意的,尽管我不清楚为什么会这样(我希望它在重命名后继续监视文件)。相关的行似乎是这些

因此,问题不在于底层 Linux 操作系统,而在于tail处理文件重命名的方式。

  • 我看你是完全正确的。对我来说,它是“tail”中的一个错误,无论是在代码中还是在文档中。我在 NodeJS 脚本中使用 tail 并用我自己的 inotify 观察器将其包裹起来,以使用重命名的文件重新初始化 tail,这不是一种优雅的方式,但它可以工作。 (2认同)