journalctl 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
journalctl——日志、时间与计划任务命令族(见日志、时间与计划任务命令族)。用 systemd 的机器上,看日志基本就是它,比翻/var/log下的文本文件更结构化。
journalctl 查询 systemd 的日志仓库(journal),支持按服务、时间、优先级等维度过滤,还能实时跟踪。它取代了传统 syslog 文本文件的部分职责。
一、基本用法
journalctl # 全部日志,时间倒序翻页(less 风格)
journalctl -u nginx.service # -u 只看某服务
journalctl -f # -f 实时跟踪(类似 tail -f)
journalctl -n 50 # -n 只看最近 50 条
journalctl -p err # -p 只看 error 及以上级别
-u按 unit(服务)过滤是日常最常用的,比 grep 整个日志精准。-f实时跟,-p err只看错误,快速定位"最近出了什么错"。
二、按时间过滤
journalctl --since "2026-08-28 09:00" --until "2026-08-28 10:00"
journalctl --since "1 hour ago" # 相对时间也支持
journalctl -u nginx --since today # 配合 -u 看某服务今天的日志时间过滤在"事发时间点前后查日志"时极有用。
--since/--until支持绝对时间和"1 hour ago""yesterday"等相对表达,定位故障窗口很高效。
三、内核日志与磁盘占用
journalctl -k # -k 只看内核日志(等价于 dmesg 范围)
journalctl --disk-usage # 看日志占了多少磁盘
journalctl --vacuum-size=500M # 清理到只剩 500M,防止日志吃满盘日志默认可能只存内存(重启丢),要持久化需在
/etc/systemd/journald.conf设Storage=persistent。磁盘快满时--vacuum-size/--vacuum-time能回收旧日志,避免 journal 把/var撑爆。
四、踩坑:日志没持久化
# 重启后 journalctl 看不到重启前的日志?默认 Storage=volatile(仅内存)
# 解决:改 /etc/systemd/journald.conf 设 Storage=persistent 后重启 systemd-journald新手常发现"昨天的问题今天查不到日志",多半是 journal 没落盘。确认
/var/log/journal是否存在、配置是否为 persistent。另外 journal 是二进制仓库,不能直接 cat,必须过 journalctl。
五、实战:服务报错快速定位
journalctl -u myapp.service -p err --since "30 min ago" # 看某服务近 30 分钟的错误相关命令
一句话总结
journalctl = 查 systemd 日志:-u 按服务、-f 实时、-p err 看错误、--since/--until 按时间窗;-k 看内核、--vacuum-size 回收防撑盘。注意默认日志可能只存内存——要持久化设 Storage=persistent。传统日志文本见 dmesg/[logrotate]。