首页/文章/以为 Mac mini 上的 Agent 一直在跑?用 pmset 审计睡眠并加心跳

以为 Mac mini 上的 Agent 一直在跑?用 pmset 审计睡眠并加心跳

· Zumac.Ai

「以为一直开着」和「真的没睡过」不是一回事

很多人把 Claude Code、定时脚本或长任务放到 Mac mini 上,心里默认:机器不关机,Agent 就 7×24。过几天回头一看,任务断了、会话没了,才发现系统其实睡过很多次。

常见错觉有这些:

  1. 屏幕灭了不等于在干活:显示器休眠和系统睡眠不是一回事;系统一睡,终端会话、未持久化的进程都会停。
  2. 「插着电」也不自动防睡:能耗策略仍可能允许空闲睡眠,尤其是远程连上又断开之后。
  3. Agent 自己不会喊救命:Claude Code 卡在半截、tmux 会话没了,你不主动查日志,几小时都可能不知道。
  4. 笔记本合盖习惯带到了常开机:设置里还留着「一段时间后睡眠」,远程机器也会中招。

要把「常开」做成可验证的状态:先审计睡眠,再改策略,最后加心跳。

Claude 账号由你自己开通并登录,请遵守 Anthropic 的服务条款与支持地区规则。本文只谈如何搭一个稳定合规的使用环境,不涉及共享或转卖账号。Zumac.Ai 与 Anthropic 没有官方合作关系。文中命令以当前 macOS 常见行为为准,正式选项以你机器上的 man pmset 与系统设置为准。

准备清单

  • 一台打算常开的 Mac mini(整机独享),已装 Claude Code,并用你自己的账号登录
  • SSH 或 UU 远程连接,能进终端看日志
  • 建议长任务放在 tmux / screen 里,避免远程断开后前台会话直接消失
  • 先在有人看着时做完审计与验收,再交给过夜任务

步骤一:用 pmset 做一次睡眠审计

在终端执行(只读,不会改设置):

``bash pmset -g pmset -g assertions pmset -g log | grep -E 'Sleep|Wake|DarkWake|Entering Sleep|Wake from' | tail -80 ``

怎么读:

  • pmset -g:看当前睡眠相关策略(如 sleep、disksleep、displaysleep)。若 sleep 不是 0,空闲一段时间后系统仍可能睡。
  • assertions:看有没有进程在声明「别睡」。没有可靠断言时,空闲更容易进睡眠。
  • 日志片段:统计最近一段时间里 Sleep / Wake 出现的次数。若你以为「一整天都在跑」,日志里却有成串睡眠记录,就说明常开假设已经破了。

把结论记下来:最近 N 小时睡了几次、大约间隔多久、是否总在远程断开后出现。后面改设置要以这份记录为准,而不是凭感觉。

不要把整段系统日志贴到公开地方。审计只在本机做,摘要留给自己。

步骤二:把「防睡」写成明确策略

审计完再改,避免盲目开关:

  1. 系统设置 → 节能 / 锁定屏幕(名称随 macOS 版本略有差异):关闭「闲置时自动睡眠」一类选项;显示器休眠可以保留(省电、不必然等于系统睡眠),但系统睡眠要按常开机目标关掉或设得很长。
  2. 用 pmset 核对(改之前先备份当前输出)。目标是让策略与「这台机器专门跑长任务」一致;改完立刻再跑一次 pmset -g 确认。
  3. 临时保活:对单次长任务可用 caffeinate -dims 包一层,例如在 tmux 里:

``bash tmux new -s agent caffeinate -dims claude ``

caffeinate 适合「这一会话别睡」;机器级策略适合「这台机本来就不该睡」。两者可以一起用,但不要只靠临时命令而忘记改系统策略。

  1. 远程工具别误关电源:UU 远程连接或 VNC 断开后,确认没有「断连即睡眠」之类的第三方设置。

改完后再抓一次 pmset -g log:空闲一两个小时,不应再出现成串的意外 Sleep。若还有,继续查 assertions 与第三方软件。

步骤三:加一层心跳,证明「Agent 还活着」

防睡解决「系统还醒着」;心跳解决「会话还在干活」。最小可行做法:

  1. 在跑 Claude Code 的 tmux 会话里,让任务周期性写一个本地文件,例如 ~/agent-heartbeat/last_ok(内容写时间戳即可)。
  2. 另开一个轻量检测(本机 launchd 或 cron):每隔几分钟读该文件;若超过约定阈值未更新,写一条告警到日志,或通过你自己的 Telegram Bot / webhook 通知(令牌放本机环境变量,不要写进仓库)。
  3. 区分两类失败:

- 心跳停了、但 tmux ls 还能看到会话 → 多半是任务卡住或进程退出,需要接回去看 transcript。 - 心跳停了、会话也没了 → 先查是否又睡眠/重启,再查 pmset 日志。

心跳脚本保持简单:只证明「最近还活过」,不要在心跳里塞密钥或大段业务逻辑。

步骤四:把审计与心跳留在常开的新加坡 Mac mini 上

笔记本合盖、家里临时机断电、Wi-Fi 抖动,都会让「以为常开」再次失效。更稳的做法是:

  1. 整机独享的新加坡 Mac mini 常开,Claude Code、tmux、心跳脚本都装在这台机器上。
  2. 日常用 SSH 看 pmset 与心跳文件;需要图形界面时再用 UU 远程连接。
  3. 每台机器一个固定专属地址,浏览器即可 SSH / VNC;策略与脚本只维护一份,避免「这台改了、那台忘了」。
  4. 每周扫一眼睡眠日志:不是每天盯着,但要能在异常后快速对比「上次正常时的基线」。

这样你出门再连回来,看到的是同一套已经验证过的防睡策略和心跳,而不是「机器好像亮着、任务却不知何时停了」。

建议验收清单

  1. pmset -g 显示的睡眠策略符合常开目标;空闲测试后日志无明显意外 Sleep。
  2. 长任务在 tmux 里跑;SSH 断开再连上可 tmux attach。
  3. 心跳文件按约定更新;故意停掉任务后,告警能在阈值内出现。
  4. 远程断开不会单独触发系统睡眠(用日志验证,不靠感觉)。
  5. 仓库与公开文档里没有机器地址枚举示例,也没有把心跳令牌写进代码。

和 Zumac.Ai 怎么配合

若你需要一台一直开着、整机独享的新加坡 Mac mini,把 Claude Code 长会话、pmset 策略与心跳长期留在机器上,出门用 SSH 或 UU 远程连接接回:Zumac.Ai 提供位于新加坡家庭宽带上的实体 Mac mini,整机独享(一人一台物理机),支持 SSH 与 UU 远程连接。新客户整机租用 ¥999/月起(季付 ¥2,697.30,半年付 6 送 1 ¥5,994,年付 12 送 2 ¥11,988);已购买客户续费保持原价。订购与开通走 panel.zumac.ai;方案说明见 首页费用区;使用问题见 帮助中心。需要人工协助可联系 Telegram @singatao。实际延迟取决于你本地的网络线路。

先审计睡眠,再改策略,最后加心跳——「常开」才会从口头承诺变成可验证的状态。

Zumac.Ai 新加坡 Mac mini M6,整机独享,¥999/月起,联系 Telegram @singatao。
查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服