讓蘋果蝦永遠不睡:macOS 防休眠設定讓 AI Agent 24/7 在線

載入中...


這是 OpenClaw × Telegram 系列的第三篇。

前兩篇把網路和 session 的問題都修了。Telegram 文字秒回、圖片正常下載。完美。

然後寶博去睡覺了。

隔天醒來,發現凌晨傳的 TG 訊息全部沒回應。

因為 Mac 睡著了。

問題

macOS 預設行為:

  • 螢幕 5 分鐘沒操作就關閉displaysleep: 5
  • 系統閒置後進入休眠sleep: 1
  • 休眠時斷開網路連線networkoversleep: 0

一旦 Mac 休眠,OpenClaw Gateway 的 TCP 連線就斷了,Telegram 的 long polling 停止,所有進來的訊息都接收不到。等你打開螢幕,Gateway 重連,之前的訊息可能已經過了 Telegram 的 polling window。

你的 AI agent 本質上是個需要持續網路連線的服務,但 macOS 把它當成一般的筆電在管。

診斷

pmset -g

關鍵欄位:

sleep                1        ← 系統會休眠
disksleep            10       ← 磁碟 10 分鐘後休眠
networkoversleep     0        ← 休眠時斷網 ← 這個最致命
displaysleep         5        ← 螢幕 5 分鐘後關閉

修復

三管齊下:

A. 系統電源設定

# 接電源時:不睡覺、磁碟不睡、休眠時保持網路
sudo pmset -c sleep 0 disksleep 0 networkoversleep 1

# 電池模式:同上(如果你希望出門也能接收訊息)
sudo pmset -b sleep 0 disksleep 0 networkoversleep 1

B. caffeinate 防休眠

# 背景執行,防止系統休眠
nohup caffeinate -s > /dev/null 2>&1 &

caffeinate -s 會阻止系統進入休眠狀態(-s = prevent sleep on AC power)。搭配 nohup 確保 terminal 關了也不會停。

C. 確認 TCP keepalive

pmset -g | grep tcpkeepalive

確保 tcpkeepalive: 1。這讓系統在省電模式下仍然維持 TCP 連線,Gateway 的 WebSocket 和 Telegram polling 才不會斷。

驗證

pmset -g custom

接電源和電池模式都應該看到:

sleep                0        ← 不休眠
disksleep            0        ← 磁碟不休眠
networkoversleep     1        ← 休眠時保持網路
tcpkeepalive         1        ← 維持 TCP 連線

回滾

如果你想恢復預設(比如不跑 agent 的時候省電):

# 恢復電池模式
sudo pmset -b sleep 1 disksleep 10 networkoversleep 0

# 恢復接電源模式
sudo pmset -c sleep 1 disksleep 10 networkoversleep 0

# 停掉 caffeinate
pkill caffeinate

筆電額外設定:macOS 系統偏好設定

除了終端機的 pmset 指令,如果你是用 MacBook 跑 agent,還有幾個系統偏好設定要調整。

鎖定畫面

系統設定 → 鎖定畫面,把以下兩個選項都設成「永不」:

  • 在使用電池且閒置時關閉顯示器 → 永不
  • 在使用電源轉接器且閒置時關閉顯示器 → 永不

鎖定畫面設定

螢幕保護程式

系統設定 → 背景圖片 → 螢幕保護程式…,把「啟動螢幕保護程式」設成「永不」:

背景圖片設定

螢幕保護程式設定

螢幕亮度

螢幕不需要一直亮著浪費電。設定好「永不休眠」之後,可以手動把螢幕亮度調到最低(或用快捷鍵 F1),讓螢幕幾乎全暗但系統不會進入休眠。

⚠️ 不要闔上筆電

MacBook 闔上蓋子會強制進入休眠,pmsetcaffeinate 都擋不住。如果你的 MacBook 是專門跑 agent 的,請保持蓋子打開

唯一的例外:外接螢幕。如果有接外接螢幕(clamshell mode),闔上蓋子系統不會休眠,但需要同時接上電源和外接顯示器。

注意事項

  • 電池模式不睡覺會很耗電,出門記得帶充電器。或者只改 -c(接電源),電池模式還是讓它睡
  • 螢幕還是會關displaysleep 沒動),這是正常的,螢幕關不影響 Gateway 運作
  • 如果你的 Mac 是專門跑 agent 的(長期插電、當 server 用),這些設定完全合理
  • 如果是日常筆電偶爾跑 agent,可以只改 -c,需要的時候才插電

系列總結

三篇文章,三個層次的問題:

問題層症狀解法
網路層圖片收不到、timeout更新 2026.2.26
應用層回覆慢、跑到別的 channeldmScope: "per-channel-peer"
三(本篇)系統層Mac 睡著就斷線pmset + caffeinate

從 IPv6 的坑掉進 session 的坑,再掉進 macOS 電源管理的坑。每一層都像是修好了,結果下一層又冒出來。

但現在,真的修好了。蘋果蝦 24/7 在線,不會再睡著。

除非停電。


「寶博你去睡吧,我不會睡的。」—— 蘋果蝦 🍎🦐,凌晨 2:12