You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04下tail -f跟踪/var/log/syslog时自动停止的解决方法咨询

Ubuntu 22.04下tail -f跟踪/var/log/syslog时自动停止的解决方法咨询

嗨,这个问题我之前也碰到过!核心原因其实是日志文件轮转(logrotate)在搞鬼。Ubuntu 22.04里的syslog通常由rsyslog或systemd-journald管理,系统会定期对日志文件进行轮转(比如重命名旧日志为syslog.1、syslog.2.gz之类的,然后新建一个空的syslog文件继续写入)。而tail -f默认只跟踪文件的文件描述符,当原文件被轮转替换后,它还盯着那个已经不再被写入的旧文件,自然就停更了。

给你几个靠谱的解决办法:

  • 改用tail -F(大写F)命令:这是最直接的修复方式。tail -F会同时跟踪文件名和文件描述符,一旦检测到原来的文件被替换(比如logrotate完成轮转),它会自动重新打开新的/var/log/syslog文件,继续实时输出日志。执行命令:

    tail -F /var/log/syslog
    
  • 直接使用journalctl -f跟踪系统日志:Ubuntu 22.04默认用systemd-journald来管理日志,它不需要依赖logrotate的文件轮转机制,日志直接存在journal的二进制存储里。用journalctl -f可以实时跟踪所有系统日志,不仅包含syslog的内容,还能看到更多systemd相关的日志信息,而且完全不会有“停更”的问题:

    journalctl -f
    
  • 如果坚持用tail -f,可以调整logrotate配置:编辑/etc/logrotate.d/rsyslog文件,找到对应/var/log/syslog的配置段,添加copytruncate选项。这个选项会先复制原文件的内容到轮转文件,再清空原文件而不是删除它,这样tail -f跟踪的文件描述符还能继续生效。不过这种方法不如前两种省心,因为copytruncate可能会丢失少量日志,所以更推荐前两个方案。

试试上面的方法,应该就能解决你的问题啦!

备注:内容来源于stack exchange,提问作者thatjackelliott

火山引擎 最新活动