![观看(旋转)登录屏幕](https://linux22.com/image/1552336/%E8%A7%82%E7%9C%8B%EF%BC%88%E6%97%8B%E8%BD%AC%EF%BC%89%E7%99%BB%E5%BD%95%E5%B1%8F%E5%B9%95.png)
我正在运行一个使用 SSH 连接的邮件服务器。我的.bash_profile
配置是将 SSH 会话附加到某个screen
会话。
现在我想将日志(例如 syslog)打印到此屏幕会话的一个窗口中。我尝试运行
tail -f /var/log/syslog
但输出每天在 6:25 停止。我猜那是日志轮换的时间。那么有没有办法将日志打印到屏幕上?
答案1
你需要tail --follow=name /var/log/syslog
原因是默认情况下(据说是出于性能原因)tail
会打开指定的文件,然后监视文件描述符它从更改调用中获取open(2)
。只要文件被更改(追加或甚至重写(通过先截断)),这种方法就可以正常工作,但如果文件被取代— 即删除并以相同的名称创建,这就是logrotate
通常所做的。
“名称”模式使用更昂贵的系统--follow
调用,它实际上每次都通过文件系统层“解析”文件的名称,并且如果注意到文件更改了其所谓的tail
stat(2)
tail
“inode”,tail
重新打开文件。
输出来自man tail
:
-f, --follow[={name|descriptor}]
随着文件的增长输出附加数据;缺少选项参数意味着“描述符”
您还可以查看-F
命令行选项,其定义为
-F
与...一样--follow=name --retry
答案2
你的猜测其实是正确的。此时 syslog 中断写入日志,将其压缩并重新启动日志。
你可以尝试
tail -f --retry /var/log/syslog
这样,当日志轮换完成后,tail 应该重试重新打开文件