Skip to main content

pmset 精炼速查

pmset 一页速查(开发者版,含简单实践)

适用对象:做开发/运维的 Mac 用户。目标:一页带走,覆盖“能做什么”全部 + 常见诊断与自动化示例。
修改设置需 sudo(root);0 常表示禁用该空闲睡眠计时。


你能用它干什么(速览)

  • 管理:显示/系统/磁盘空闲睡眠、网络唤醒、掀盖/电源切换唤醒、Power Nap 等。
  • 诊断:查阻止睡眠的进程(power assertions)、睡眠/唤醒历史、电池异常“跳水”。
  • 调度:一次性或重复的开机/唤醒/关机/睡眠计划;相对时间唤醒。
  • UPS:在台式机/服务器上设置紧急关机阈值

快速语法与作用域

# 改设置(作用域:-a 全部 | -b 电池 | -c 充电 | -u UPS)
sudo pmset [-a|-b|-c|-u] [setting value] ...

# 查看
pmset -g [option]

# 计划/自动化
sudo pmset schedule <type> "MM/dd/yy HH:mm:ss"
sudo pmset repeat <type> <MTWRFSU> HH:mm:ss
pmset relative [wake|poweron] <seconds>

# 立即动作/维护
pmset [sleepnow|displaysleepnow|boot|touch]

高频设置(最常用)

  • displaysleep N:显示器闲置 N 分钟睡眠;0=不睡
  • sleep N:系统闲置 N 分钟睡眠;0=不睡
  • disksleep N:磁盘闲置 N 分钟停转;0=不停
  • womp 0|1:网络魔术包唤醒(等同“允许网络唤醒”)
  • lidwake 0|1:掀盖唤醒(笔记本)
  • acwake 0|1:电源切换唤醒
  • ttyskeepawake 0|1:活跃 tty(如 SSH)时阻止系统空闲睡眠
  • powernap 0|1:Power Nap(支持机型)
  • hibernatemode 0|3|25:休眠策略(见下)
  • hibernatefile <path>:休眠镜像位置(必须在根卷

安全睡眠/待机相关(慎改)

  • hibernatemode
    • 0(台式机常见):只睡,不写镜像;断电上下文丢失但唤醒快。
    • 3(笔记本默认):睡 + 写镜像;断电可从镜像恢复。
    • 25:总写镜像并断开内存供电;更省电,唤醒更慢。
  • 待机/自动断电:standby 0|1standbydelayhigh/lowhighstandbythresholdautopoweroff 0|1autopoweroffdelay

UPS(仅台式/服务器,配合 -u

  • haltlevel <percent>:电量低于阈值关机
  • haltafter <minutes>:放电运行 N 分钟后关机
  • haltremain <minutes>:剩余可用分钟数到阈值关机

-1 关闭该条件;多条件 任一触发 即执行关机。

查询与诊断(排障首选)

pmset -g                 # 当前设置(live)
pmset -g assertions      # 谁在阻止系统/显示器睡眠
pmset -g log             # 睡眠/唤醒历史(调试常用)
pmset -g batt            # 电池状态(或 -g ps)
pmset -g pslog           # 连续打印电池/UPS 变化(抓“电量跳水”)
pmset -g cap             # 本机支持的电源能力
pmset -g everything      # 一次性收集全部信息(10.8+)

常见诊断路径

  • “电脑睡不着”:先看 pmset -g assertions → 关闭/退出持有断言的进程(常见:下载、视频、IDE、外设守护进程)。
  • “20–50% 突然睡死”:复现前先跑 pmset -g pslog,现象常见为电量从 30%→0% 跳变(疑似电池老化)。
  • “合盖后网络任务中断”:检查 womp、路由器是否支持 WoL;必要时使用 caffeinate 保持。

计划任务(开关机/唤醒/睡眠)

# 一次性:2025-11-11 07:30 唤醒(注意 MM/dd/yy)
sudo pmset schedule wake "11/11/25 07:30:00"

# 每周二 12:00 唤醒或开机;每天 20:00 睡眠
sudo pmset repeat wakeorpoweron T 12:00:00 sleep MTWRFSU 20:00:00

# 取消所有重复计划
sudo pmset repeat cancel

# 相对唤醒:从现在起 1800 秒后唤醒(用于睡眠循环实验)
pmset relative wake 1800
  • type: sleep|wake|poweron|shutdown|wakeorpoweron
  • weekdays: MTWRFSU 任意子集(如 MTWRF 工作日)

简单实践(可直接套用)

1) 临时防睡眠(优先用 caffeinate 而非改全局)

# 编译或长时间任务(直到命令结束)
caffeinate -i -- ./gradlew build

# 运行本地服务且保持显示常亮
caffeinate -di -- uvicorn app:app --reload

-i 阻止系统睡眠;-d 阻止显示器睡眠。

2) 远程 SSH 期间不睡

# 全局方案(更激进):有活跃 tty 时不睡
sudo pmset -a ttyskeepawake 1
# 更推荐:只在会话内防睡(退出即恢复)
ssh user@host 'caffeinate -dimsu -- long_task.sh'

3) 开发/演示两套基线(快速切换)

# 电池(省电)
sudo pmset -b displaysleep 5 sleep 15 disksleep 10 powernap 1
# 充电(演示/会议,不让系统睡)
sudo pmset -c displaysleep 15 sleep 0 disksleep 0 womp 1

4) CI/台式机稳定运行(谨慎)

# 不建议笔记本长期这样;用于专职构建主机
sudo pmset -a sleep 0 disksleep 0 displaysleep 10 womp 1

5) UPS 安全阈值(台式/服务器)

# 电量 <40% 关机
sudo pmset -u haltlevel 40
# 电量 <25% 或 剩余 <30 分钟 即关机
sudo pmset -u haltlevel 25 haltremain 30

6) 导出/还原当前配置(便携)

# 导出
pmset -g custom > ~/pmset-profile.txt

# 还原则需手动对照应用(示例:)
# 可将行内 "Battery Power" 与 "AC Power" 的键值抄回到相应作用域
# 或用下面的小脚本做“配置片段”

7) “配置片段”脚本(最小可用)

# 保存为 ~/bin/pmset-profiles.sh && chmod +x ~/bin/pmset-profiles.sh
case "$1" in
  dev-battery)
    sudo pmset -b displaysleep 5 sleep 15 disksleep 10 powernap 1 ;;
  dev-ac)
    sudo pmset -c displaysleep 15 sleep 0 disksleep 0 womp 1 ;;
  demo)
    sudo pmset -a displaysleep 20 sleep 0 disksleep 0 womp 1 ;;
  restore-defaults)
    sudo pmset restoredefaults ;;
  *)
    echo "Usage: $0 {dev-battery|dev-ac|demo|restore-defaults}" ;;
esac

常见命令一览(抄走即用)

# 查看当前设置 / 电池快照 / 阻止睡眠者 / 历史
pmset -g
pmset -g batt
pmset -g assertions
pmset -g log

# 一次性/重复计划
sudo pmset schedule wake "11/11/25 07:30:00"
sudo pmset repeat shutdown MTWRF 23:30:00

# 立即睡眠 / 仅让显示器睡 / 重新读取设置
pmset sleepnow
pmset displaysleepnow
pmset touch

文件位置与复位

  • 设置持久化:/Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist
  • 计划任务:/Library/Preferences/SystemConfiguration/com.apple.AutoWake.plist
  • 恢复默认:sudo pmset restoredefaults

风险与提示

  • hibernatemode/hibernatefile 改动影响深度睡眠与唤醒速度;镜像必须在根卷
  • 深度省电(autopoweroff 等)会让唤醒更慢;用于台式/服务器需充分验证。
  • 长任务请优先 caffeinate,避免误把全局睡眠改成 0

—— 完 ——