一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Journalctl 实战技巧:怎样提取特定服务与单元的运行日志

时间:2026-07-03 10:05:46 编辑:袖梨 来源:一聚教程网

查服务日志核心命令是 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.servicessh.service
  • 若服务刚启用但未启动,加 --allsystemctl 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"
  • 常用表达:yesterdaytoday1 day ago30 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"

扩展场景:不只是 .service 单元

journalctl 的 -u 不仅适用于服务,还能查其他类型 unit:

  • socket 单元:journalctl -u sshd.socket(用于排查 socket 激活失败)
  • timer 单元:journalctl -u logrotate.timer(看定时任务是否如期触发)
  • path 单元:journalctl -u mywatch.path(监控路径事件日志)
  • 注意:这些 unit 名同样需带后缀,且须先通过 systemctl list-units --type=socket 等确认存在

热门栏目