2026 OpenClaw 租用 Mac Mini 實戰 以 GitHub API 觸發 workflow_dispatch 編排夜間批處理鏈、冪等檢查點與退避告警

約 6 分鐘

七乘二十四託管租用 Mac Mini上跑 OpenClaw,夜間批處理常要「雲端管線可審計、觸發與祕密靠近機器」。與GitLab Scheduled Pipeline把排程放在平台內不同,本文刻意以 GitHub Actions 的 workflow_dispatch 當唯一入口:由租用機準時呼叫 GitHub RESTPOST /repos/.../actions/workflows/{workflow_id}/dispatches,雲端跑鏈、本機管時鐘、檢查點與退避。延伸:排程與佇列矩陣launchd 分區cron 扇出與退避

令牌最小權限

優先建立 Fine-grained PAT,僅綁單一儲存庫,權限收斂到能呼叫「Actions:讀寫」或官方文件允許觸發 workflow_dispatch最小集合;避免把組織層級管理或內容寫入一併打開。若團隊仍用 Classic,請用僅限 repo範圍、設定到期日,並把權杖放進受保護的環境檔而非寫死在 shell 歷史。檢查點:用唯讀帳呼叫同一端點應被拒絕;輪替時採雙權杖重疊一期再撤舊值,符合長跑節點變更紀律。

cron/launchd 觸發

夜間視窗建議落在租用機本地低互動時段,並以 launchd(可設 ThrottleInterval、崩潰退避)或 cron 包一層薄腳本:載入環境檔、寫結構化日誌、呼叫 curl 觸發 GitHub。重點是不在雲端再排一個「第二套時鐘」與本機打架;GitHub 只接收 dispatch,長耗時步驟仍在 Actions 或回呼 OpenClaw。檢查點:手動跑一次 plist/crontab 後,Actions Runs 出現新列且時間戳與 Mac 日誌相差在一分鐘內

冪等檢查點

在 workflow 宣告 workflow_dispatch.inputs(例如 run_modebatch_key),讓雲端 job 與 OpenClaw 任務契約化。Mac 端以小型狀態檔記錄「上一個成功送出的 batch_key」;重啟或重試時若鍵未變則不再次 dispatch。可再加 GitHub 端 concurrency 群組,避免同一夜兩次重疊。檢查點:人為連按兩次腳本,Runs 仍維持單一有效鏈或第二 run 立即被群組取消且日誌可解釋。

workflow 片段(示意):

on:
  workflow_dispatch:
    inputs:
      run_mode:
        required: true
        type: string
      batch_key:
        required: true
        type: string

concurrency:
  group: nightly-openclaw-${{ github.ref }}
  cancel-in-progress: true

jobs:
  chain:
    runs-on: ubuntu-latest
    steps:
      - name: Dispatch downstream or call OpenClaw
        run: echo "${{ inputs.run_mode }} ${{ inputs.batch_key }}"

失敗 Webhook

將「觸發失敗」與「流水線失敗」分開:前者是 curl 非 2xx、逾時、或無法連 GitHub;後者由 Actions 內步驟回報。觸發層建議在腳本尾端以非零退出驅動 launchd 重試策略,並對 429/5xx指數退避+抖動,退避窗內不重打告警通道以免噪音。可選:把摘要 POST 到既有監控(參考New Relic 夜批)或 Ops 工具,但權杖仍守最小權限

最小 curl 檢查點

OWNERREPOWORKFLOW_FILE 換成實際值;成功應回 HTTP 204

curl -fsS --retry 3 --retry-all-errors --retry-delay 20 \
  --connect-timeout 10 --max-time 120 \
  -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer ${GITHUB_DISPATCH_TOKEN}" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  "https://api.github.com/repos/OWNER/REPO/actions/workflows/WORKFLOW_FILE.yml/dispatches" \
  -d '{"ref":"main","inputs":{"run_mode":"nightly_chain","batch_key":"'$(date -u +%Y-%m-%d)'"}}'

排錯 FAQ

回傳四二二或工作流程找不到?
確認路徑用的是檔名(如 nightly.yml)且預設分支上確實存在;ref 指向含該檔的分支。
OpenClaw 與 Actions 誰當「主鏈」?
建議 Actions 管可公開的步驟與矩陣,OpenClaw 管閘道與私密資料面;邊界用受控 URL 與短期憑證銜接,必要時參考閘道升級/回滾節奏。

下一步:穩定節點再談自動化

穩定出口可預測算力承載夜間鏈,請看套餐定價免登入下單;連線見幫助中心部落格

免登入立即租用