如果日志旋转,tail 将停止显示

如果日志旋转,tail 将停止显示

我必须跟踪服务器 (servicemix) 的日志,并且启用了日志轮换。一旦发生轮换,尾部就会停止显示。我做了一些调查,这是 Debian 中的一个错误:Debian 错误报告。这个 bug 已经存在很久了。有人知道 Ubuntu 中的这个 bug 是否要修复吗?

我使用的是 Ubuntu 12.04 64 位。不用说,这个错误简直是地狱!每次遇到这个问题,我都必须中断命令尾部并重新执行该命令!

答案1

Gnu 核心实用程序tail 版本具有参数--follow[={name|descriptor}],它允许您跟踪文件名而不是描述符。即使文件被旋转或截断,它仍会跟踪文件。从帮助输出中:

使用 --follow (-f) 时,tail 默认跟踪文件描述符,这意味着即使 tail 文件被重命名,tail 仍将继续跟踪其结尾。当您真正想要跟踪文件的实际名称而不是文件描述符(例如,日志轮换)时,这种默认行为并不可取。在这种情况下,请使用 --follow=name。这会导致 tail 以适应重命名、删除和创建的方式跟踪命名文件。

我使用的是 Fedora,但我相信您可以使用以下命令在 Ubuntu 上安装 Gnu coreutils:

sudo apt-get install coreutils

答案2

您可以通过将必要的命令添加到配置中来自动中断和恢复 tail 命令logrotate。请参阅https://help.ubuntu.com/community/LinuxLogFiles#Log_Rotation- 简而言之,您可能希望将命令放入/etc/cron.daily/logrotate处理轮换的系统范围的 crontab 中。

答案3

正如错误报告中所述,您可以inotify使用以下方法绕过故障代码:

tail ---disable-inotify servicemix.log

然后它将使用较旧的轮询行为。

相关内容