CLI AI

用 journalctl 查看服务最近一小时的日志

2026-06-20

命令是 journalctl -u nginx --since '1 hour ago':-u 选择 unit,--since 设定时间窗口。四个参数——-u、--since、-p 和 -f——覆盖了大部分事件排查场景,下面的顺序就是实际使用的顺序:从列出服务的全部日志,到实时跟踪错误流,再到导出一份不受轮转影响的副本给同事。

1. 怎样查看单个服务的日志?

clai
$ clai 显示 nginx 的日志→ journalctl -u nginx

-u 表示 unit。不加它会得到整个系统日志,你服务的消息会淹没在内核消息和其他一切之中。

2. 怎样把时间窗口缩小到最近一小时?

clai
$ clai 显示 nginx 最近一小时的日志→ journalctl -u nginx --since '1 hour ago'

--since 能理解自然的时间表达:today、yesterday、'1 hour ago'、'2026-06-20 14:00'。还有配对的 --until,用来截断事故之后的尾部。

3. 怎样只显示错误?

clai
$ clai 只显示 nginx 今天的错误→ journalctl -u nginx --since today -p err

-p 是 syslog 优先级。err 显示 error 级别及更严重的——critical、alert、emergency。完整级别:emerg、alert、crit、err、warning、notice、info、debug。

4. 怎样实时跟踪日志?

clai
$ clai 现在开始跟踪 nginx 的日志→ journalctl -u nginx -f

这相当于 tail -f,但 journald 了解日志轮转,所以这个命令不会中途沉默。这才是它相对于直接读文件的真正优势。

5. 怎样查看上次启动以来发生了什么?

clai
$ clai 显示这个服务自上次启动以来的错误→ journalctl -u nginx -b -1 -p err

-b 表示 boot。-b -1 是上一次启动,-b 0 或直接 -b 是当前这次。当机器意外重启、需要弄清原因时不可或缺。

6. 怎样把日志交给同事?

clai
$ clai 把 nginx 今天的日志导出到文件,不分页→ journalctl -u nginx --since today --no-pager -o short-iso > nginx-today.log

--no-pager 去掉 less,否则在非交互环境下命令会卡住。-o short-iso 给出 ISO-8601 格式的时间戳,排序正确且不受 locale 影响。

常见坑

  • -u 接收的是 unit 名,不是进程名。 journalctl -u nginx 可以,journalctl -u /usr/sbin/nginx 不行。systemctl list-units --type=service 能列出 unit 名称。
  • 日志不一定能挺过重启。 如果 /etc/systemd/journald.conf 里设置了 Storage=volatile,历史记录会在重启时丢失。检查 /var/log/journal 是否存在即可确认。
  • 用户 unit 和系统 unit 是分开的。 对于以你自己用户运行的服务,需要用 journalctl --user -u 名称,否则什么都查不到。

相关问题

怎样只看最后 N 行? journalctl -u nginx -n 50。journalctl 默认从头开始显示全部内容,日志量大时很不方便。

journalctl 比直接读 /var/log 里的文件好在哪? 它了解日志轮转,能按 unit、优先级和时间过滤,还能显示那些根本不写文件的服务的日志。

怎样限制日志占用的空间? 在 /etc/systemd/journald.conf 中设置 SystemMaxUse=500M,然后执行 systemctl restart systemd-journald。一次性清理用 journalctl --vacuum-size=200M。

相关阅读

别再死记 journalctl 的参数了——描述事故,CliAI 帮你写命令。一行命令安装。