journalctl 命令可高效排查 Linux 服务状态:一、用 - u 查看指定服务日志,加 –no-pager 避免分页,- f 实时跟踪;二、- b 筛选本次启动日志,-b - 1 查上次,–since 限定时间;三、- p 按优先级过滤错误;四、–output=short-iso 和 –show-cursor 增强时间与行号定位;五、–output=export 导出二进制日志供跨主机分析。

如果您在 Linux 系统中需要排查服务的运行状态,但无法通过常规命令获取详细日志信息,则可能是由于 systemd 日志未被正确检索或过滤。以下是使用 journalctl 命令进行服务状态排查的实战操作步骤:
一、查看指定服务的完整日志流
journalctl 默认记录所有 systemd 管理的服务日志,通过 - u 选项可限定输出特定服务的全部历史日志,便于定位启动失败、崩溃或异常退出事件。
1、执行命令:journalctl -u sshd.service,其中 sshd.service 可替换为实际服务名(如 nginx.service、docker.service)。
2、添加 –no-pager 参数避免分页阻断:journalctl -u nginx.service –no-pager。
3、若需实时跟踪新日志,追加 - f 参数:journalctl -u docker.service -f。
二、筛选最近一次启动的日志
服务重启后旧日志仍保留在缓冲区中,- b 选项可精确提取本次系统启动以来该服务产生的日志,排除历史残留干扰。
1、运行:journalctl -u mariadb.service -b,仅显示当前 boot 周期内 mariadb.service 的日志。
2、若需上一次启动的日志,使用 -b -1:journalctl -u postfix.service -b -1。
3、结合 –since 限定时间范围,例如查看本小时内日志:journalctl -u httpd.service -b –since “1 hour ago“。
三、按优先级过滤关键错误信息
journalctl 支持基于日志级别(priority)筛选,优先级 0(emerg)至 7(debug),其中 0–3 为错误类日志,可快速识别故障根源。
1、只显示错误及以上级别日志:journalctl -u cron.service -p err。
2、同时包含警告与错误:journalctl -u rsyslog.service -p warning。
3、导出严重错误到文件供离线分析:journalctl -u systemd-networkd.service -p emerg > /tmp/emerg.log。
四、结合时间戳与行号精确定位
当服务日志量庞大时,启用 UTC 时间戳和行号有助于比对系统时间线与外部监控告警时间,提升问题复现效率。
1、以 ISO 8601 格式显示时间并启用行号:journalctl -u kubelet.service –output=short-iso –show-cursor。
2、查找包含特定关键词的带序号日志行:journalctl -u NetworkManager.service | grep -n “DHCP”。
3、从某行开始向下查看 20 行(配合 grep - n 结果使用):journalctl -u bluetooth.service | sed -n ‘45,65p’。
五、导出二进制日志供跨主机分析
journalctl 原始日志为二进制格式,直接复制文本可能丢失结构化字段;使用 –output=export 可生成可移植的二进制流,兼容其他 journalctl 实例解析。
1、导出指定服务的二进制日志:journalctl -u auditd.service –output=export > auditd.journal。
2、在另一台机器上验证导出内容完整性:journalctl –file=auditd.journal –no-pager | head -20。
3、仅导出某时间段内的二进制日志:journalctl -u firewalld.service –since “2024-05-01” –until “2024-05-02” –output=export > fw.journal。






























