# 前言

幫家人、朋友或企業老闆部署好 OpenClaw 之後,最常聽到的問題是:

「欸我的 AI 怎突然沒回應了?」

深入排查後往往發現,可能是觸發 OpenClaw stop gateway、也可能是系統更新後 launchd service 沒重啟、規則格式錯誤,各種原因。

出問題了只能傳訊息或問 AI「壞掉了怎辦」——而你可能正在出國、開會、或睡覺。

就算你遠端連回去重啟,也搞不清楚「到底復活了沒」,下次又繼續發生一樣的狀況,根源沒有解決。

這篇文章要解決的就是這個問題:

  • 🔴 即時偵測:OpenClaw 一掛就知道,不用等人回報
  • 📲 Telegram 通知:不管人在哪,手機秒收警報
  • 🌐 隨時可查:有個公開 URL,隨時看 AI 的心跳狀態
  • 🔁 開機自動啟動:所有服務都設成系統服務,重開機不用手動

目標:監控 OpenClaw(AI 助手)的運行狀態,掛掉時自動 Telegram 通知,隨時從任何地方查看心跳狀態。

# 架構概覽

OpenClaw (AI 助手)
    │ 每 5 分鐘 heartbeat ping

Uptime Kuma (Docker)  ←──── komistat.komichi.uk
    │                              ▲
    │ 超時未收到 ping → 發通知      │
    ▼                        Cloudflare Tunnel
Telegram Bot 通知

# 前置準備

  • macOS(Apple Silicon)
  • Homebrew
  • Cloudflare 帳號 + 網域(本文使用 komichi.uk
  • Telegram 帳號

# 安裝步驟

# Step 1:安裝 Docker Desktop

brew install --cask docker

安裝後開啟 Docker Desktop,等 menubar 鯨魚圖示穩定。

macOS 26 Beta 注意:若遇到 md5: command not found 錯誤,執行以下修復:

cat > /tmp/md5_wrapper.sh << 'EOF'
#!/bin/bash
openssl md5 "$@" 2>/dev/null | awk '{print $2}'
EOF
sudo cp /tmp/md5_wrapper.sh /usr/local/bin/md5
sudo chmod 755 /usr/local/bin/md5

# Step 2:用 Docker 啟動 Uptime Kuma

docker run -d \
  --name uptime-kuma \
  --restart unless-stopped \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  louislam/uptime-kuma:1

確認啟動成功:

docker ps | grep uptime-kuma
curl -o /dev/null -w "%{http_code}" http://localhost:3001
# 應回傳 302

# Step 3:安裝 Cloudflare Tunnel

brew install cloudflared

Cloudflare Zero Trust Dashboard網路 → 連接器 → 建立通道,建立一個 tunnel(例如 mini-komichi),拿到 token 後執行:

Cloudflare Tunnel Dashboard

sudo cloudflared service install <YOUR_TOKEN>

這會把 cloudflared 安裝為系統服務,開機自動啟動。


# Step 4:設定 Cloudflare Tunnel 路由

建立設定檔 ~/.cloudflared/config.yml

tunnel: <YOUR_TUNNEL_ID>
credentials-file: /etc/cloudflared/<YOUR_TUNNEL_ID>.json

ingress:
  - hostname: komistat.komichi.uk
    service: http://localhost:3001
  - service: http_status:404

在 Cloudflare DNS 新增 CNAME record:

  • 名稱komistat
  • 目標<YOUR_TUNNEL_ID>.cfargotunnel.com
  • Proxy:橘色雲朵開啟

更新 LaunchDaemon 讓 cloudflared 讀 config.yml,然後重啟服務:

sudo launchctl bootout system/com.cloudflare.cloudflared
sudo launchctl bootstrap system /Library/LaunchDaemons/com.cloudflare.cloudflared.plist

測試:

curl -o /dev/null -w "%{http_code}" https://komistat.komichi.uk
# 應回傳 302

# Step 5:設定 Uptime Kuma Heartbeat Monitor

打開 https://komistat.komichi.uk 建立帳號,然後:

  1. 點「新增監測器」
  2. 類型選 「Push」
  3. 名稱填任意(例如 OpenClaw 心跳
  4. 心跳間隔300(秒)
  5. 重試次數1(避免誤判)
  6. 儲存,拿到 Push URL

Push URL 格式:

https://komistat.komichi.uk/api/push/<TOKEN>?status=up&msg=OK&ping=

Uptime Kuma Dashboard


# Step 6:設定 OpenClaw Heartbeat

編輯 ~/.openclaw/workspace/HEARTBEAT.md

## Ping 指令

curl -s "https://komistat.komichi.uk/api/push/<TOKEN>?status=up&msg=OK&ping=" > /dev/null

## 檢查項目
- Docker uptime-kuma container 是否 running
- 如果有異常,回報給 Young(不回 HEARTBEAT_OK)

編輯 ~/.openclaw/openclaw.json,把 heartbeat 間隔設成 5 分鐘:

"heartbeat": {
  "every": "5m"
}

重啟 OpenClaw:

openclaw gateway restart

# Step 7:設定 Telegram 通知

首先去 Telegram 搜尋 @BotFather,傳 /newbot 建立一個新的 bot,取得 Bot Token。

然後去 Uptime Kuma 設定通知:

  1. 右上角頭像 → 「通知設定」
  2. 「新增通知」
  3. 通知類型選 「Telegram」
  4. 填入以下資訊:
    • 機器人權杖(Bot Token):從 @BotFather 取得的 token
    • 聊天 ID(Chat ID):你的 Telegram User ID(可點「自動取得」)
  5. 「測試」 確認有收到 bot 發來的測試訊息
  6. 儲存後,回到監測器編輯頁面,把這個通知勾選加進去

Uptime Kuma Telegram 通知設定

💡 Chat ID 取得方式:先去跟你的 bot 傳 /start,然後點「自動取得」就能自動填入。


# 自動復活機制

光是「知道掛了」還不夠,理想情況是 OpenClaw 能自己爬起來。

好消息是:launchd 已經幫你做好這件事了。

OpenClaw 安裝時會在 ~/Library/LaunchAgents/ai.openclaw.gateway.plist 寫入以下設定:

<key>KeepAlive</key>
<true/>
<key>ThrottleInterval</key>
<integer>1</integer>

KeepAlive = true 的意思是:只要 OpenClaw process 意外退出,launchd 就會自動把它重新拉起來。

所以整個流程變成:

OpenClaw 意外 crash

launchd 偵測到 process 死亡

自動重啟 OpenClaw(1 秒內)

OpenClaw 恢復正常,繼續 ping Kuma

Kuma 狀態從紅色恢復綠色 💚

⚠️ 注意:手動執行 openclaw gateway stop 會卸載 service,launchd 就不會自動重啟。
若只是想暫時重啟,請用 openclaw gateway restart,不要用 stop。

# 最終效果

  • ✅ OpenClaw 每 5 分鐘自動 ping Uptime Kuma
  • ✅ 超過 5 分鐘沒收到 → 狀態變紅 🔴
  • ✅ Telegram 立即通知
  • ✅ 隨時從任何地方打開 https://komistat.komichi.uk 查看狀態
  • ✅ 開機自動啟動(Docker + cloudflared 都是系統服務)

# 小結

整套系統的核心概念是 Push-based heartbeat:不是由外部主動去 ping 服務,而是由服務本身定期 ping 監控平台。這樣的好處是不需要對外暴露任何 API endpoint,安全性更高。

Cloudflare Tunnel 則解決了「家用機沒有固定 IP / 沒有 port forwarding」的問題,免費且穩定,是自架服務對外的最佳方案之一。