Mac 总是从睡眠中自动唤醒怎么办?
用 macOS 自带的电源管理工具查明唤醒原因并彻底解决。
快速开始
Mac 频繁自动唤醒,不仅夜间白白耗电,用起来也让人心烦。原因几乎总是可以查明的:日志会记录每次唤醒的具体原因,配合系统设置工具就能对症处理。本指南带你从诊断走到验证修复。
症状
查明是谁把 Mac 唤醒的
电源管理日志会记录每次睡眠和唤醒的原因——开盖、键盘输入、网络流量、蓝牙等等。查看最近二十条事件,找出反复出现的唤醒来源。如果每次都是同一个原因,那就是问题所在。
读取电源管理事件日志,弄清睡眠和唤醒原因:合盖、键盘、网络还是蓝牙。
$ pmset -g log | grep -E "Entering Sleep|Wake from|DarkWake from" | tail -20查看是什么在阻止或打断睡眠
应用程序可能持有电源断言(assertion),阻止睡眠或触发暗唤醒。断言列表会标明每个来源,方便你找出失控的应用、音频流或屏幕共享会话。关闭对应进程后,该断言应当消失。
列出所有电源断言——每个应用、音频流或屏幕共享阻止睡眠的具体原因。
$ pmset -g assertions查看当前的睡眠设置
先打印当前的电源配置——电池和充电器状态分别列出。留意网络唤醒选项以及过短或为零的睡眠定时器,这些都会让 Mac 容易被唤醒。记下这些数值,方便修复后对比。
pmset -g custom 会分别列出使用电池和电源适配器时 Mac 实际生效的睡眠与电源参数。
$ pmset -g custom设置合理的空闲睡眠时间
如果睡眠定时器太短或未设置,Mac 会在睡眠和唤醒之间频繁切换。设置一个明确的空闲睡眠阈值,并回读数值确认已生效。设为 0 会完全禁用系统睡眠——只有在明确需要时才这样做。
在命令行精确设定 Mac 空闲多少分钟后休眠,并随时读回当前值,适合批量管理。
$ sudo systemsetup -setcomputersleep 15 && sudo systemsetup -getcomputersleep▾ 撤销
$ sudo systemsetup -setcomputersleep 0可选:让 Mac 在长任务期间保持唤醒
有时问题恰好相反:你需要 Mac 在下载或渲染期间保持唤醒,又不想改系统设置。caffeinate 可以在指定时间内抑制睡眠,结束后自动退出,不会留下任何后台进程。
caffeinate 可以在命令运行期间或指定时长内阻止 Mac 睡眠,适合挂机下载或演示时使用。
$ caffeinate -d -t 3600验证 Mac 能入睡且不再被唤醒
手动让 Mac 进入睡眠,静置一分钟左右。如果没有自行唤醒,再回到第一步重新查看唤醒日志:修复之后不应再出现新的、原因不明的唤醒记录。
pmset 自带两个一键命令:displaysleepnow 熄灭屏幕,sleepnow 让整台 Mac 立即进入睡眠。
$ pmset displaysleepnow如何确认已解决
修复后手动让 Mac 睡眠并静置。再次查看唤醒日志,不应出现新的、原因不明的唤醒记录。
一键全部撤销
上面每一条命令都可以撤销。按此顺序执行即可全部还原。
$ sudo systemsetup -setcomputersleep 0执行前请先确认——部分步骤之间可能并非相互独立。
来源
- systemsetup(8) man page依据: The systemsetup man page describes -setcomputersleep as setting the system sleep amount in minutes and -getcomputersleep as displaying it.
- caffeinate — prevent sleep (macOS man page)依据: Documents flags -d (display), -i (system idle), -m (disk), -s (system) and -t seconds for a timed assertion.
- pmset(1) man page依据: Lists `-g log` among the -g getter options: display the system power management log including sleep and wake entries with their reasons.
- pmset - Power management settings依据: Documents `pmset -g log`: 'Display a history of sleeps, wakes, and other power management events', noting the log is for admin and debugging purposes.
- systemsetup - Set System Configuration Preferences依据: Documents -setcomputersleep minutes (0 = never) and -getcomputersleep for reading the current idle-sleep timer.
最后验证: 2026-09-21