You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用journalctl -f跟踪服务日志时无法显示启动后内容的问题咨询

解决journalctl -f看不到服务启动后日志的问题

我来帮你排查这个问题——你用sudo journalctl -u some-service -f跟踪日志,但只能看到服务启停记录和之前实例的日志,看不到启动后的新日志,大概率是这几个原因之一,咱们一步步来:

1. 先确认服务日志是否真的进入了systemd journal

首先按Ctrl+C暂停当前的follow模式,执行这条命令查看最近10分钟的完整日志:

sudo journalctl -u some-service --since "10 minutes ago"

如果这里也看不到启动后的日志,说明服务的日志根本没进到systemd的journal里,得检查服务的systemd配置:

  • 找到服务的单元文件,通常在/etc/systemd/system/some-service.service或者/lib/systemd/system/some-service.service
  • 打开文件查看[Service]段里的StandardOutputStandardError配置:
    • 如果这两个参数设置成了file:/path/to/your/logfile或者null,服务日志会被写到指定文件或丢弃,不会进入journal
    • 改成StandardOutput=journalStandardError=journal(或者用inherit继承父进程输出设置),然后重新加载systemd并重启服务:
      sudo systemctl daemon-reload
      sudo systemctl restart some-service
      
    • 如果服务本身是把日志写到自定义文件(比如/var/log/some-service.log),直接用tail -f跟踪这个文件即可:
      tail -f /var/log/some-service.log
      

2. 日志被级别过滤隐藏了

journalctl默认可能只显示warning及以上级别的日志,如果你的服务输出的是infodebug级别的内容,就会被隐藏。试试加上日志级别参数跟踪:

sudo journalctl -u some-service -f -p debug

-p debug会显示所有级别的日志,你可以根据需要换成infonotice等更严格的级别。

3. 尝试刷新journald缓存

如果上面的检查都没问题,试试重启systemd-journald服务刷新日志缓存:

sudo systemctl restart systemd-journald

另外也可以用systemctl status some-service确认服务是否真的在正常运行——如果服务启动失败或者静默异常,自然也不会有日志输出。

做完这些后再重新启动follow模式,应该就能看到服务启动后的日志了!

内容的提问来源于stack exchange,提问作者Casper Alant

火山引擎 最新活动