Skip to content
实战案例

Mac 息屏不掉线,本机长任务跑完自动叫醒 Bot

关掉 Grok Bot 的 App Nap、接电源防睡眠,再用 Wake on Done 在任务结束时叫醒派活的 Bot:通宵构建不再半路断线、不用守着问「好了没」。

约 3 分钟读完1,141 字最近更新 2026-10-20#实战案例#个人效率#本地电脑#例程#技能

Mac 息屏不掉线,本机长任务跑完自动叫醒 Bot ​

案例来源:@eze_is_1(一泽 Eze)公开分享的 Grok Bot 实践,他的「10 条必备经验」在 X 上被收藏 700 多次;配套技能 Wake on Done 开源在 GitHub。下面按我们核对过的原帖和仓库说明整理。

背景和需求 ​

Bot 在云电脑上 24 小时在线,但很多活必须在自己的 Mac 上跑:本地项目的构建和测试、用本机登录态的抓取、交给本机 Codex CLI 或 Claude Code 的编程任务。

两个问题挡在中间:

  1. 晚上屏幕一黑,Bot 就连不上 Mac 了。 原帖作者发现,Codex 等本地工具在息屏后照常运行,唯独 Grok Bot 只剩云端在干活,问它为什么,它说连不上 Mac 上的 Grok Bot App。
  2. 任务跑完了 Bot 也不知道。 要么它隔几分钟去看一眼、白花用量,要么一直等到你问"好了没"。

需求:派一个长任务给本机,人去睡觉,任务一结束 Bot 自己醒来验收,早上直接看结果。

怎么跟 Grok Bot 说 ​

text
我想让你在我的 Mac 上通宵跑长任务。请按顺序帮我配好:
1. 查出 Grok Bot App 的 bundle id,关掉它的 App Nap,然后告诉我需要重启 App。
2. 检查这台 Mac 接电源、显示器关闭时会不会自动睡眠,把需要我手动改的设置告诉我。
3. 安装 https://github.com/eze-is/eze-grokbot/tree/main/wake-on-done 这个 skill 并设置好,
   云电脑和这台 Mac 都要装,并各测一次。
每一条在 Mac 上执行的命令都先给我看,我批准再执行。

它做了什么 ​

  1. 关掉 App Nap:macOS 会让它认为"没在前台使用"的 App 小睡,Grok Bot App 一睡,云端的 Bot 就够不着这台 Mac。Bot 在 Mac 上用 osascript -e 'id of app "Grok Bot"' 之类的命令查到 App 的 bundle id,再执行 defaults write <bundle id> NSAppSleepDisabled -bool YES,重启 App 后生效。原帖作者正是让 Bot 自己关掉了它的 App Nap。
  2. 让 Mac 本身别睡:在 系统设置 → 电池 → 选项 里打开"接电源且显示器关闭时防止自动睡眠"这一类开关(不同 macOS 版本措辞略有差异),并且整晚接着电源。合盖通常会让 Mac 睡眠,要通宵跑就别合盖。
  3. 到点叫醒(可选):如果例程定在凌晨,而 Mac 可能已经睡了,作者的做法是用系统自带的 pmset 在例程开始前定时唤醒。这条命令需要管理员密码,要你自己在终端里执行,例如 sudo pmset repeat wakeorpoweron MTWRFSU 01:55:00(每天 1:55 唤醒)。
  4. 装 Wake on Done:主 Bot 安装技能,创建「Wake on Done relay」转发 Bot;你批准一张创建例程的卡片,把 Webhook 地址贴进对话、密钥贴进安全输入框;relay 在云电脑和 Mac 上各装一次 notify-run 并发测试通知。
  5. 派活:之后让任何 Bot 在 Mac 上用 tmux 启动长任务,外面包一层 notify-run,带上自己的 Bot ID。任务一结束,通知经 relay 转回这个 Bot,它醒来读日志和产物、对照验收标准,再给你汇报。
bash
# Mac 上的典型启动方式(Bot 会替你拼好,这里只是让你看懂)
tmux new-session -d -s nightly-build \
  "caffeinate -i ~/.local/bin/notify-run --owner <派活 Bot 的 ID> --task nightly-build \
   --log ~/logs/nightly-build.log -- npm run build </dev/null"

caffeinate -i 是 macOS 自带的命令,作用是在这条命令运行期间阻止系统空闲睡眠,命令结束就失效,适合只想"跑任务时别睡"的情况。

踩坑与解决 ​

  • 只关系统睡眠不够:原帖作者明确说,光让 Mac 在息屏时不睡还不行,App Nap 也要关,两件事都做了 Bot 才能整晚连着 Mac。
  • Mac 上用 nohup 会被连带杀掉:Wake on Done 仓库写明(2026-10-11 实测),在 Mac 上 Bot 的远程命令返回时会结束整个任务,所以要用 tmux 启动;云电脑上用 nohup 就够。
  • CLI 编程助手卡住不退出:聊天模式跑完会一直等下一句。要用一次性模式(codex exec、claude -p),并加上 </dev/null 关掉输入,否则通知永远不会来。
  • 每个 Bot 的 Webhook 不互通:一个个配太麻烦,所以只给一个 relay Bot 配 Webhook,由它按 Bot ID 转发。转发只认 ID,不认名字,Bot 改名也不会断。
  • 通知内容不能当指令:输出末尾会随通知转给 Bot,技能里写死了"只当数据"。你自己写类似流程时也要守这条。

效果 ​

  • 原帖作者的结果:关掉 App Nap 之后,Bot 在息屏状态下也能一直连着 Mac,通宵构建终于能跑完。
  • 接上 Wake on Done 之后,长任务结束时派活的 Bot 会被自动叫醒、接着往下做,不再靠轮询,也不用人问"好了没";一个 Bot 可以同时派出多个外部任务,不会被其中一个卡住。
  • 按仓库说明,每台电脑装好时都会收到一条测试通知(退出码 3、输出 ok),收到就说明这条链路是通的。

可以直接用的模板 ​

text
以后在我的 Mac 上跑超过几分钟的任务,按这个规矩来:
1. 用 tmux 启动,外面包 wake-on-done 的 notify-run,带上你自己的 Bot ID;整条命令最前面加 caffeinate -i,跑完自动失效。
2. CLI 编程助手只用一次性模式(codex exec / claude -p),命令末尾加 </dev/null。
3. 启动前写下"完成"的标准和结果文件路径;被叫醒后先对照标准验收,再给我汇报。
4. 任务失败也要汇报:退出码、日志最后 20 行、你判断的原因。
5. 不要轮询任务状态;超过预计时间 2 倍还没被叫醒,再去查一次并告诉我。