可用log show命令精准提取macos睡眠与唤醒事件,需结合时间范围限定、关键词匹配(如wake reason/sleep/darkwake)及子系统过滤,并用pmset -g assertions定位活跃唤醒源。
可以直接用 log show 命令精准提取 macos 的睡眠与唤醒事件,关键在于时间范围限定、关键词匹配和子系统过滤。
查看最近的 Wake 事件
最常用的方式是结合时间窗口和关键词搜索:
- 查过去一小时内的唤醒记录:
log show --last 1h | grep -i "wake reason" - 查今天所有含 wake 的日志(含 sleep/wake/darkwake):
log show --start "$(date -f "%Y-%m-%d" "+%Y-%m-%d 00:00:00")" | grep -i "wake\|sleep\|darkwake" - 用 NSPredicate 更可靠(避免漏匹配):
log show --predicate 'eventMessage contains[c] "Wake reason" OR eventMessage contains[c] "DarkWake" OR eventMessage contains[c] "Sleep"' --last 2h
识别唤醒来源类型
日志中 “Wake reason” 后面的字段说明了触发唤醒的具体硬件或机制:
- EC.LidOpen 或 LID0:合盖后手动开盖唤醒(用户主动)
- EHC / EHC2:键盘或触控板输入触发
- OHC / USB:外接 USB 设备(如鼠标、U 盘插拔)
- RTC:定时唤醒(如“唤醒以检查邮件”或 Time Machine 计划备份)
- Bluetooth / Ethernet:蓝牙设备连接或网线接入唤醒
配合 pmset 定位活跃唤醒源
仅看日志还不够,需确认当前有哪些进程正在阻止系统真正休眠:
- 运行
pmset -g assertions,重点关注标为 Yes 的PreventUserIdleSystemSleep - 若看到
coreaudiod、apsd、mDNSResponder等长期占用,说明它们在持续拉起系统 - 再结合
log show --last 30m | grep "Wake reason"对照时间点,就能判断是哪个服务引发的唤醒
导出并分析较长时间段日志
排查反复唤醒问题时,建议保存结构化日志便于回溯:
- 导出最近 6 小时唤醒相关日志到文件:
log show --last 6h --predicate 'eventMessage contains[c] "Wake reason" OR eventMessage contains[c] "DarkWake"' > ~/Desktop/wake_log.txt - 加
--style syslog可让时间戳更易读:log show --last 2h --style syslog --predicate 'eventMessage contains[c] "Wake reason"' - 注意:Unified Logging 默认保留约 7 天日志,过久远的事件可能已被轮转清除











