journalctl -u 选项用于按服务 unit 名称查询日志,如 nginx.service;需确认 unit 名(非软件名),可用 systemctl list-units --type=service 筛选;支持 -n、--since、-f、-o json 等组合;推荐用 -p err 或 _comm= 过滤;-b 和 -b -1 分别查本次及上次启动日志。

在 Linux 中,journalctl 是 systemd 日志系统的命令行工具,按服务名称查日志最直接的方式是使用 -u(unit)选项,指定服务的 unit 名称。
确认服务的 unit 名称
服务名不一定是软件名,而是 systemd 管理的 unit 文件名,通常以 .service 结尾。例如:
-
nginx对应nginx.service -
ssh对应sshd.service(注意不是ssh.service) -
docker对应docker.service
不确定时,可用以下命令列出所有已加载的服务并筛选:
systemctl list-units --type=service | grep nginx
基本查询命令
查某个服务的全部日志(从旧到新):
journalctl -u nginx.service
常用组合建议:
-
journalctl -u nginx.service -n 50:只显示最近 50 行 -
journalctl -u nginx.service --since "2024-05-01":查指定日期之后的日志 -
journalctl -u nginx.service -f:实时跟踪(类似tail -f) -
journalctl -u nginx.service -o json:输出为 JSON 格式,便于脚本解析
过滤与高亮关键信息
结合 grep 可快速定位错误或特定字段:
journalctl -u nginx.service | grep -i "error\|fail"
更推荐用 journalctl 原生过滤(性能更好、保留结构):
-
journalctl -u nginx.service -p err:只显示 error 及以上级别(err、crit、alert、emerg) -
journalctl -u nginx.service _PID=1234:按进程 PID 过滤(需先查到对应 PID) -
journalctl -u nginx.service _COMM=nginx:按可执行文件名过滤(适用于多进程服务)
查看失败服务的上下文日志
若服务启动失败,可连带查看启动过程中的依赖和系统级消息:
-
journalctl -u nginx.service --all:显示完整字段(含隐藏元数据) -
journalctl -u nginx.service -b:仅查当前启动以来的日志(避免混入历史启动记录) -
journalctl -u nginx.service -b -1:查上一次启动的日志(适合排查重启后异常)











