`tail -f`有时会停止更新 – 并且文件没有移动

我最近注意到有时tail -f <logfile>会停止更新到屏幕上。

做一个Ctrl>C并重新启动tail工作正常,虽然。 我检查了一下,确保日志文件没有在中间旋转(这可能会使tail失去理智)。

这会导致什么? 我正在运行RHEL 5.2 x64。

尝试用strace包装你的尾巴命令,如果你有它:

 strace -Tt -o /tmp/tail.trace tail -f /var/log/messages 

然后,只是为了疯狂的recursion踢,你可以尾巴strace输出(没有问题,如果这打破了,因为它出去一个文件):

  tail -f /tmp/tail.trace 

我看起来像:

 8:39:00 write(1, "ng SMAC\n", 8) = 8 <0.000026> 18:39:00 read(3, "", 0) = 0 <0.000019> 18:39:00 fstat64(3, {st_mode=S_IFREG|0640, st_size=92990, ...}) = 0 <0.000019> 18:39:00 fstatfs64(3, 84, {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=4807069, f_bfree=1924458, f_bavail=1680271, f_files=1221600, f_ffree=820806, f_fsid={-1331083162, -1313908385}, f_namelen=255, f_frsize=4096}) = 0 <0.000021> 18:39:00 inotify_init() = 4 <0.000033> 18:39:00 inotify_add_watch(4, "/var/log/messages", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1 <0.000041> 18:39:00 fstat64(3, {st_mode=S_IFREG|0640, st_size=92990, ...}) = 0 <0.000019> 18:39:00 read(4, 

-t开关时间和-T开关通话时间。

打回4或5回来做一些垂直空间,然后等待它停止拖尾。 希望输出中会有一些线索。

尝试使用:

tail --follow=name <logfile>

看看这是否更好。 你不必担心它被从你身边转出来。


任何模式停止? 一定的时间? 一天中的某个时间?

鉴于这两个有问题的日志文件是由同一个应用程序的不同组件编写的,我想知道是不是该应用程序的日志logging代码的一部分导致了问题。 我提出了两个testing,以更好地了解发生了什么事情:

  • 在启动尾部之前请注意日志文件的inode( ls -i logfile ),一旦尾部失败,请再次检查。 如果inode发生了变化,那么logging器会重写整个日志文件,这会破坏尾部的连接。

  • 注意尾停止工作之前的最后一行,然后访问该文件并在该行之后find第一个日志条目。 如果可能的话,做3-5次。 如果程序执行日志logging时出现问题,那么在看到尾部中断后立即写入日志条目的部分很可能是负责任的。 如果该日志条目始终相同,或者来自程序的相同组件,则可能有足够的数据向应用程序供应商提交问题报告。

祝你好运。

在这里有同样的问题。

问题是,我正在观看的文件是从另一台机器上安装的。 更改通知不通过挂载传播。

解决方法是在原机上使用尾巴。