SSH连接邮件服务器后,如何在Screen会话中持续查看轮转日志?
解决日志轮转后
tail -f停止跟踪的问题 这个问题我之前维护邮件服务器时也碰到过!日志轮转(logrotate)触发后,普通的tail -f就跟着旧的日志文件走了,自然就停更了。给你几个靠谱的解决办法,按推荐程度排序:
1. 直接换成tail -F(大写F)
这是最简单的解决方案,把你的命令从:
tail -f /var/log/syslog
改成:
tail -F /var/log/syslog
tail -F和小写-f的区别在于,它会同时跟踪文件名和文件inode。当logrotate把旧的syslog重命名归档、新建同名的日志文件后,tail -F会自动检测到文件名对应的inode变化,重新打开新的日志文件继续输出,完美适配轮转场景。
2. 如果是systemd发行版,用journalctl实时跟踪
现在大部分Linux发行版都用systemd管理系统日志,直接用journalctl的实时跟踪功能更灵活:
journalctl -f
它本身就内置了对日志轮转的处理,不会出现停更的问题。如果你只想看邮件服务器相关的日志,还可以过滤特定服务,比如Postfix:
journalctl -f -u postfix.service
3. 调整logrotate配置(可选,不推荐首选)
如果不想换命令,也可以修改syslog的logrotate配置文件(一般在/etc/logrotate.d/syslog或/etc/logrotate.conf),给对应的日志条目添加copytruncate选项:
/var/log/syslog { daily rotate 7 copytruncate # 添加这一行 missingok notifempty compress delaycompress sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }
copytruncate的作用是先复制旧日志内容到归档文件,再清空原文件,而不是删除原文件后新建。这样原文件的inode不变,tail -f就能继续跟踪。不过这个方法有个小风险:复制和清空的间隙可能会丢失少量日志,所以不如前两个方法可靠。
优先推荐前两个方案,简单又稳定,完全能满足你在Screen窗口持续查看日志的需求。
内容的提问来源于stack exchange,提问作者tr01
相关产品推荐
相关产品推荐

