最直接的方式是用 journalctl -u 服务名.service,如 journalctl -u nginx.service;必须带 .service 后缀,否则静默返回空结果;确认服务名应先运行 systemctl list-units --type=service | grep -i 关键词,并可用 -b、-f、--since、--no-pager | grep 等组合精准过滤。

最直接的方式是用 journalctl -u 服务名.service,比如查 Nginx 日志就输 journalctl -u nginx.service。注意必须带 .service 后缀,漏掉会静默返回空结果,不报错也不提醒。
确认服务名和状态
有些服务名和日常叫法不同,比如 sshd 在 systemd 中实际 unit 名就是 sshd.service,但也有像 docker 可能对应 docker.service 或 containerd.service。稳妥做法是先运行:
-
systemctl list-units --type=service | grep -i 关键词(如grep -i docker) -
systemctl status 服务名—— 最后几行通常会显示最近几条日志,还能确认服务是否在运行、有没有 failed 状态
常用查看方式组合
单纯看全部日志容易淹没关键信息,建议按场景选参数:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 只看本次开机后的日志:
journalctl -u nginx.service -b - 实时跟踪新日志(适合调试):
journalctl -u nginx.service -f - 查最近 100 行:
journalctl -u nginx.service -n 100 - 限定时间范围:
journalctl -u nginx.service --since "5 minutes ago"或--since "2026-10-08 14:00"(时间字符串加双引号)
让输出更实用
默认 journalctl 会走分页器(less),远程终端或脚本中不方便。加 --no-pager 直接输出到终端,再配合 grep 快速定位问题:
journalctl -u mysql.service --no-pager | grep -i "error\|fail\|timeout"journalctl -u sshd.service --no-pager | grep "Disconnected"
注意:加了 --no-pager 就不能用 / 键搜索了,得靠 grep 替代。
查不到日志?先看是不是没存下来
journalctl 返回空,未必是命令写错了,很可能是日志根本没保留:
- journald 默认把日志存在
/run/log/journal/(内存临时目录),重启就清空 - 要跨重启保留日志,需启用持久化:创建目录
/var/log/journal,然后重启 journald:sudo systemctl restart systemd-journald - 检查配置:
cat /etc/systemd/journald.conf | grep -E "^(Storage|MaxRetentionSec)",确认Storage=persistent

















