首页/系统/Linux 运维命令速查/journalctl 时间窗口过滤语法

journalctl 时间窗口过滤语法

--since/--until 支持相对与绝对时间:yesterday、-1h、'2 hours ago'、'2026-10-12 09:00';排障先框时间窗再层层过滤。

Linux 运维命令速查系统更新于 2026-10-13

时间窗口过滤是什么

journalctl 的 --since 与 --until 定义一个时间窗口,参数既可以是 yesterday、-1h、2 hours ago 这类相对表达,也可以是 2026-10-12 09:00 这样的绝对时间。排障顺序通常是先框时间窗,再用单元、优先级、关键字逐层收窄。

基本信息

适用平台Linux + systemd(journalctl)
命令语法journalctl --since 时间 [--until 时间]
时间格式today / yesterday / -1h / '2 hours ago' / 09:00 / 2026-10-12 09:00
组合建议与 -u、-p、-b、-n 叠加,先粗后细

典型使用场景

  • 事故定位:从告警时间往前取 30 分钟日志,比翻全量输出快得多
  • 变更窗口核对:用 --since 与 --until 只看发布时段,排除无关噪音
  • 按天巡检:--since today 配合 -p err 快速过一遍错误
  • 跨启动对比:先 journalctl --list-boots 取到编号,再用 -b -1 加时间窗定位上次启动的问题
  • 日志交接:把时间窗内的输出导出成文件,交付他人时上下文完整

常用窗口

常用窗口
journalctl --since today --no-pager | tail -n 50
journalctl --since '2 hours ago' --until '1 hour ago'
journalctl --since 09:00 --until '09:30'              # 今天 9:00-9:30
journalctl --since '2026-10-11' --until '2026-10-12 06:00'
journalctl --since yesterday -p err | head -n 30
journalctl -u myapp --since '-30 min' -o short-iso    # 带时区偏移,便于跨机对齐

配合 boot 使用

配合 boot 使用
journalctl --list-boots | tail -n 5
journalctl -b -1 --since '2026-10-11' --no-pager | head -n 50
journalctl -b --since '10 min ago'                   # 本次启动且最近 10 分钟

时间写法对照

写法含义备注
today / yesterday当天零点起 / 前一天零点起按本地时区解释
-1h 或 -30 min相对当前时间往前单位可用 s、m、h、d、w
'2 hours ago'自然语言相对时间含空格必须加引号
09:00今天 09:00未写日期时按近期最接近的时刻解析
2026-10-12 09:00绝对时间跨天排查务必写全日期
时间参数含空格时必须整体加引号,否则被 shell 拆成两个参数直接报错。
只写时分不写日期时按近期最接近的时刻解析,跨天排查容易少看一天,写全日期最稳。
把输出交给脚本时加 --no-pager,避免分页器截断;需要结构化处理就加 -o json,时间字段精度到微秒,便于与其他系统日志对齐。
排查远程主机或容器日志时先用 timedatectl 确认时区,再决定时间窗的写法,否则整体平移一小时会把人带偏。
journald 未持久化时(没有 /var/log/journal)重启前的窗口查不到任何记录,先确认日志留存范围。
查历史窗口前先确认日志是否跨重启保留:没有持久化时,重启之后的查询只能看到本次启动的记录,时间窗过滤会返回空结果,让人误以为那段时间什么都没发生。把时间窗与启动编号、服务单元一起使用,能在多次重启之间准确划定范围。

易错点

  • 时间参数带空格不加引号会被 shell 拆成两个参数,journalctl 报参数无效而不是给出提示
  • 窗口内结果仍很多时不要一味叠加 grep,用 -u、-p、-b 收窄能把噪音降一个量级
  • 只写 09:00 这种时分格式可能被解析到昨天或前天,跨天排查必须写全日期
  • journald 未开启持久化时时间窗过滤结果总是空的,先 journalctl --list-boots 确认可查范围
  • 只看时间窗不管启动边界:跨重启的窗口里两次启动的日志会被混在一起,排查启动故障时应先按启动编号分段再看时间

数据来源与参考

  • man 1 journalctl(--since/--until 时间解析)
  • systemd.time(7)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌