journalctl 是 systemd 日志系统的核心命令,用于查询和管理 journald 收集的结构化日志,支持按服务、时间、优先级、字段等多维度筛选,并提供实时跟踪、启动日志调试等功能。

journalctl 是 systemd 日志系统的核心命令,用于查询和管理由 journald 收集的结构化日志。它比传统 /var/log/ 下的文本日志更强大,支持按服务、时间、优先级、用户等多维度筛选。
查看基本日志
直接运行 journalctl 会输出从系统最早可查日志到最新的全部内容(按时间倒序),类似 tail -f /var/log/syslog,但默认是全量滚动显示。
- 加
-n 20只看最近 20 行 - 加
--no-pager禁用分页器(适合配合grep) - 加
-o json输出为 JSON 格式,方便脚本解析
按时间范围筛选日志
journalctl 支持自然语言式时间表达,也支持精确时间戳:
-
journalctl --since "2 hours ago"查最近两小时日志 journalctl --since "2024-05-10" --until "2024-05-11 08:00"-
journalctl --since today或--since yesterday
按服务或单元过滤
用 -u 指定服务名(即 unit 名),非常实用:
-
journalctl -u sshd.service查 SSH 服务日志 -
journalctl -u nginx.service -u php-fpm.service同时查多个服务 -
journalctl -u docker.service --since "1 day ago"结合时间使用
注意:服务名后缀 .service 通常可省略,如 journalctl -u nginx 也有效。
按优先级和字段筛选
日志有标准优先级(0=emerg 到 7=debug),常用:
-
journalctl -p err只看错误及以上(err、crit、alert、emerg) -
journalctl -p debug包含所有级别(含 debug 和 info) -
journalctl _PID=1234查指定进程 ID 的日志(下划线表示匹配字段) -
journalctl _COMM=sshd查特定命令名(如 sshd、bash)产生的日志
常见字段还有 _UID、_HOSTNAME、SYSLOG_IDENTIFIER 等,可通过 journalctl -o verbose 查看某条日志的完整字段。
实时跟踪与启动日志
调试系统启动或服务行为时特别有用:
-
journalctl -f实时跟随新日志(类似tail -f) -
journalctl -b查本次启动以来的日志 -
journalctl -b -1查上一次启动日志(需启用持久日志) -
journalctl --list-boots列出所有已记录的启动会话及编号
若需保存历史启动日志,请确保 /var/log/journal/ 目录存在且 journald 配置中 Storage=persistent 已启用。
journalctl 功能丰富但不复杂,关键是理解它的结构化特性——日志不是纯文本,而是带字段的记录,合理利用字段和单位名能极大提升排查效率。


















