journalctl -u 本身不支持时间段检索,但可通过 --since 和 --until 参数精准查询指定服务在某段时间内的日志,需先用 systemctl list-units 确认服务名(如 nginx.service),时间格式支持绝对与相对表达式,并可结合 -n、--no-pager、-o short-iso 等选项提升可读性与实用性,注意时区一致性及日志持久化配置。

journalctl -u 本身不直接支持“时间段”检索,但配合时间参数(--since 和 --until)就能精准查指定服务在某段时间内的日志。
确认服务单元名称
先用以下命令列出所有已注册的服务,找到目标服务的准确名称(注意带 .service 后缀):
systemctl list-units --type=service --all- 或快速过滤:
systemctl list-units --type=service | grep nginx→ 得到nginx.service
按时间范围查询服务日志
语法结构为:journalctl -u --since="YYYY-MM-DD HH:MM:SS" --until="YYYY-MM-DD HH:MM:SS"
- 时间格式灵活:支持
"2024-05-20"、"2024-05-20 14:30"、"2 hours ago"、"yesterday"、"1 week ago" - 示例:查 nginx 昨天全天的日志:
journalctl -u nginx.service --since="yesterday" --until="today" - 示例:查今天上午 9 点到 11 点的 sshd 日志:
journalctl -u sshd.service --since="today 09:00" --until="today 11:00"
提升可读性与实用性的小技巧
加几个常用选项让输出更清晰:
-
-n 100:只显示最后 100 行(防刷屏) -
--no-pager:禁用分页,方便管道处理(如配合grep) -
-o short-iso:用 ISO 格式显示时间,更易识别 - 组合示例:
journalctl -u docker.service --since="2024-05-18" --until="2024-05-19" -n 50 -o short-iso --no-pager | grep -i "failed"
注意时区与日志时效性
journalctl 默认使用系统本地时区,确保你输入的时间和系统时区一致:
- 查当前时区:
timedatectl | grep "Time zone" - 如果系统用 UTC,而你想按北京时间查,需手动加 8 小时(如
--since="2024-05-20 00:00:00+0800"),或改用相对时间避免出错 - 注意:journal 日志可能未持久化,重启后若没启用持久存储(
/var/log/journal/),旧日志会丢失











