如何对日志轮换文件执行`tail -f`?

max*_*zig 124 logs logrotate rsyslog tail

在长时间运行的系统上,我通常有一个终端

$ tail -f /var/log/kern.log
Run Code Online (Sandbox Code Playgroud)

或类似的东西打开。

但有时我必须重新启动此类命令,因为不再显示新消息。

我认为这是因为替换日志文件的日志轮换作业tail -f正在“观察”。

如何避免这种重启问题?

我可以调用tail这样它注意到旋转过程并做正确的事情吗?

(我在rsyslogd默认使用的 Ubuntu 11.04 系统上注意到了这个问题。)

and*_*coz 198

请改用该-F选项:

tail -F /var/log/kern.log
Run Code Online (Sandbox Code Playgroud)

-F选项告诉tail通过文件名跟踪文件的更改,而不是使用在轮换期间更改的 inode 编号。如果文件不存在,它也会继续尝试打开文件。

  • 太棒了,是的,我是。(只是为了记录,这是一个 GNU tail 选项 - GNU tail 当然是 Ubuntu 上的默认选项)。 (7认同)
  • @Basj - 根据 http://man7.org/linux/man-pages/man1/tail.1.html 它是等效的 (4认同)
  • `tail -F /var/log/kern.log` 是否等同于 `tail -f --follow=name --retry /var/log/kern.log`? (3认同)