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。










