用journalctl -u查特定服务某小时内日志,需配合--since和--until指定精确时间范围,如journalctl -u nginx.service --since "2024-05-20 14:00:00" --until "2024-05-20 15:00:00",或用相对时间journalctl -u sshd --since "1 hour ago";务必确认服务名带.service后缀且存在。

要用 journalctl -u 检索某个服务在**特定小时内**的运行日志(即启动、停止、崩溃、状态变更等),关键在于精确控制时间范围,并结合服务单元名过滤。Journalctl 本身不直接支持“第N小时”这种相对表述,但可通过时间戳(绝对或相对)精准限定一小时内产生的日志。
指定服务并限制为最近一小时内
最常用场景是查该服务“过去60分钟内”的日志:
journalctl -u nginx.service --since "1 hour ago"journalctl -u sshd --since "60 minutes ago"
注意:--since 支持自然语言(如 "1 hour ago"、"2024-05-20 14:00:00"),journalctl 会自动解析为本地时区对应的时间点;日志默认按时间倒序排列(最新在前)。
检索某天某小时(例如:2024-05-20 的 14:00–15:00)
需用起止时间双参数,确保覆盖整点小时(注意:journalctl 的 --until 是“不包含”语义,所以建议多写一秒或用下一小时起点):
journalctl -u docker.service --since "2024-05-20 14:00:00" --until "2024-05-20 15:00:00"- 更稳妥写法(避免边界遗漏):
--until "2024-05-20 15:00:01"或--until "2024-05-20 15:00:00.999"
时间格式必须符合 YYYY-MM-DD HH:MM:SS,空格不能省略;若省略秒,默认为 :00。
只看服务状态变化(启动/停止/失败)
单纯查日志可能信息过载,可配合 grep 筛选关键事件:
journalctl -u mysql.service --since "2 hours ago" | grep -E "(Starting|Started|Stopping|Stopped|Failed|activating|deactivating)"- 或使用
--priority侧重错误与告警:journalctl -u nginx.service --since "1 hour ago" -p err..notice(err=3, notice=5)
注意:systemd 启动失败通常带 Failed with result,崩溃常含 coredump 或 segmentation fault,这些都可作为 grep 关键词。
确认服务单元名是否正确
误写服务名会导致无输出(静默失败)。先用以下命令验证:
-
systemctl list-unit-files --type=service | grep nginx(看是否存在nginx.service) -
systemctl status nginx(确认当前名称和加载状态) - 常见别名:如
apache2在 Debian/Ubuntu 是apache2.service,RHEL/CentOS 是httpd.service
若服务由 socket 或 timer 触发,还需检查关联单元(如 nginx.socket),但 -u 默认只查 service 类型。











