journalctl按时间范围查日志核心是--since和--until参数,支持英文/iso格式时间表达式,需注意--until不支持相对时间,建议加--utc统一时区,并可用--no-pager、-o short-iso等提升实用性。

用 journalctl 按时间范围精准查日志,核心是 --since 和 --until 两个参数。它们能直接框定起止时间,不用手动解析时间戳,也不依赖外部工具。
确认时间表达是否有效
journalctl 内置时间解析器,但只认英文或 ISO 格式,不支持中文(如“昨天”不行,“yesterday”可以)。常见可用写法包括:
- 相对时间:
"2 hours ago"、"yesterday"、"1 week ago" - 绝对时间:
"2026-09-24 08:30:00"、"2026-09-24T14:20:05+0800" - 简写日期:
"2026-09-24"默认从当天 00:00:00 开始;"today"同理 - 注意:
--until不支持"30 minutes ago"这类相对表达,只能用具体时间或"now"
查指定服务在某段时间的日志
先确认服务名是否准确(如 nginx.service 而非 nginx),再组合时间参数:
- 查今天上午 9 点到下午 3 点的 MySQL 日志:
journalctl -u mysql.service --since "today 09:00" --until "today 15:00" - 查上周末(9 月 20 日)全天的 Docker 日志:
journalctl -u docker.service --since "2026-09-20" --until "2026-09-21"
避免时区偏差影响结果
系统默认按本地时区解析时间。若服务器分布多地或需跨团队对齐,统一加 --utc:
-
journalctl -u sshd.service --since "2 hours ago" --utc journalctl --utc --since "2026-09-24T10:00:00Z" --until "2026-09-24T12:00:00Z"
提升可读性与实用性的小技巧
- 加
--no-pager防止卡在分页器里,方便管道处理(如配合grep) - 加
-o short-iso让每行时间戳格式统一(如2026-09-24T14:22:03.123456+0800) - 加
-n 100只显示最后 100 行,避免刷屏 - 组合示例:
journalctl -u nginx.service --since "1 hour ago" --no-pager -o short-iso -n 50 | grep -i "error"
不复杂但容易忽略











