查服务日志核心命令是 journalctl -u 服务名.service,必须带 .service 后缀;服务单元名不等于进程名,需用 systemctl list-units --type=service 确认;支持 --since/--until 指定时间范围;常用选项包括 --no-pager、-n、-o short-iso;-u 也适用于 socket/timer/path 等 unit 类型。
查特定服务日志,核心就一条命令:journalctl -u 服务名.service,但必须带 .service 后缀,否则静默返回空——这是最常踩的坑。
systemd 里的服务名不等于进程名或命令名。比如你装了 Nginx,运行 ps aux | grep nginx 看到的是 nginx,但它的 unit 名通常是 nginx.service。
systemctl list-units --type=service
systemctl list-units --type=service | grep -i ssh → 可能输出 sshd.service 或 ssh.service
--all:systemctl list-units --type=service --all | grep myapp
-u 本身不支持“时间段”语法,但搭配 --since 和 --until 就能锁定任意时段。
journalctl -u docker.service --since "2 hours ago" --until "now"
journalctl -u nginx.service --since "2026-06-10 08:00:00" --until "2026-06-10 17:30:00"
yesterday、today、1 day ago、30 minutes ago(不支持中文如“昨天”)默认输出走分页器(less),对远程终端或管道处理不友好;加上几个小选项,效率翻倍。
--no-pager:禁用分页,直接输出到终端或管道-n 100:只显示最后 100 行,防刷屏-o short-iso:时间戳统一为 ISO 格式(如 2026-06-11T09:05:22),便于比对journalctl -u mysql.service --since "1 hour ago" -n 50 -o short-iso --no-pager | grep -i "error|fail"
journalctl 的 -u 不仅适用于服务,还能查其他类型 unit:
journalctl -u sshd.socket(用于排查 socket 激活失败)journalctl -u logrotate.timer(看定时任务是否如期触发)journalctl -u mywatch.path(监控路径事件日志)systemctl list-units --type=socket 等确认存在