決策矩陣 · 佇列 · 維運

2026年小團隊共享遠端 Mac 決策矩陣:Nomad 式輕量任務隊列 vs 自建 cron 扇出——延遲、搶佔隔離與構建衝突驗收清單

2026.04.10 Meshmac 約 5~7 分鐘閱讀

池化遠端 Mac維運/協作:xcodebuild 重疊與共享快取互搶時,多支 cron 像無聲樂透Nomad 式語意能把搶佔與併發寫成契約;本文對照 cron 扇出,收斂延遲、隔離與構建衝突驗收。控制面常放 Linux VM、Mac 為執行端。多節點後佇列同步見OpenClaw MeshMac 部署與任務佇列同步首頁幫助中心購買頁免登入

場景邊界

cron 扇出適合:單一維運帳號、腳本短且冪等、每行 flock+牆鐘上限、接受分鐘級抖動。多小隊、CI 與真人同車道,或要優先權/公平性時,cron 常不敷用。

Nomad 式排程適合把「每機一條 codesign」「解析 2 並行、archive 1」等max concurrent寫死,並宣告化重啟/重排。兩工作可能寫同一可變目錄卻無鎖域=已進佇列+鎖。占座、VNC 等協作失敗見共享 Mac 佇列與占座 FAQ

隊列模型對比表

欄位即維運契約:能否不靠翻多份 crontab 判讀狀態。

維度 cron 扇出+包裝腳本 Nomad 式輕量隊列
首次開跑延遲 多為 60s 週期;縮週期易羊群化。 佇列驅動;暖機時 p50 常 <1 分鐘。
併發控制 flock/計數/Redis,易漂移。 task group、count、spread;上限單點可讀。
搶佔/隔離 多無;砍長任務靠口傳。 重啟/重排/優先級+稽核軌跡。
可觀測性 日誌散、關聯弱。 集中歷史、標準標籤。
維運負擔 裝快、長期漂移高。 前期重、人變多時較穩。
典型故障 靜默重疊、快取壞。 約束錯→飢餓,HCL 可修。

可執行設定要點

收緊的 cron(單車道):明確鎖檔、拒絕堆疊。

# /etc/crontab 片段 — 僅 buildlane 使用者
*/1 * * * * buildlane /usr/bin/flock -n /var/run/meshmac/build.lane.lock \
  timeout 45m /usr/local/bin/run-ci-dequeue.sh >>/var/log/meshmac/dequeue.log 2>&1

出隊前檢查 pending:長度 >20 則 exit 77 並告警。細節見flock 構建佇列 FAQ

Nomad 週期 batch(示意 HCL;控制面執行,任務內再 SSH/agent 連 Mac):

job "meshmac-mac-build" {
  datacenters = ["dc1"]
  type        = "batch"

  periodic {
    cron             = "*/2 * * * *"
    prohibit_overlap = true
  }

  group "lane" {
    count = 1
    task "dequeue" {
      driver = "exec"
      config { command = "/usr/local/bin/run-ci-dequeue.sh" }
      resources { cpu = 500 memory = 512 }
      restart {
        attempts = 3
        interval = "30m"
        delay    = "30s"
        mode     = "delay"
      }
    }
  }
}

單一 archive 車道請開 prohibit_overlap。實際 Mac 工作留在 run-ci-dequeue.sh(SSH/runner),政策集中於 job。

權限與鎖

排程歸排程,macOS 強制權限buildlane 專帳、簽章僅授權該帳;LaunchDaemon 用 sudo -u buildlane,勿 root 跑 Xcode。

  • 鎖粒度:每共享資源(Pods、cache、模擬器)各一 .lock
  • 中繼資料:鎖旁 JSON 記 job_idcommitrunner_name
  • 清理:trap 釋放鎖並刪半成品 .xcarchive

構建衝突驗收清單

  • 同路徑雙 dry-run 無寫入交錯(或僅於 flock 短區內)。
  • CI/手動共用同一出隊入口
  • 鎖等待 p95 勿常態 >15 分鐘。
  • 強殺後無僵死 flock
  • 五晚 archive 後磁碟仍 >15%。

超時退避參數

抄入 runbook,依 p95 構建微調。

參數 cron+shell 基線 Nomad 式基線
單任務牆鐘 輕量 timeout 45m;重 archive 90m task kill_timeout 對齊同值;勿沿用預設 30s 跑 Xcode。
鎖等待 套件管理建議 flock -w 180;逾時失敗並打點。 等待寫在 worker;排程器重啟勿忙迴圈,delay 至少 30s
重試退避 指數:30s、60s、120s 封頂;乘 0.8~1.2 抖動。 reschedulemax_delay = "5m"delay_function = "exponential"
全域 pending 上限 每車道 pending 20;拒絕時回可判讀 HTTP/exit code。 提交端+佇列雙重強制;Nomad 不替你猜業務 SLA。

重試前可 sleep $((30 + RANDOM % 30));日誌帶 attemptreason

FAQ

Mac 上要跑 Nomad? 不必;Linux 控制面+Mac 執行即可,重點是宣告式契約

cron 簡單為何仍爆? 無 pending 上限→隱性積壓;縮週期只擠鎖。

搶佔寫哪? 配置歸排程器;VNC/協作歸 runbook/占座。

小結與下一步

cron 適合單車道且鎖/逾時/深度當程式碼維護;要對齊併發鍵與稽核時改 Nomad 式。兩者皆須權限與 flock 域

p95 等待壓不住時,優先加節點或專用共享構建,勿在單機硬疊 archive。購買頁(免登入)選多節點/共享構建;首頁幫助中心;延伸部落格列表

先加節點 再談搶佔

多節點與專用共享構建資源

成長中團隊:發版與夜構分節點、互動另機,佇列才可測。免登入下單

多節點擴容 共享構建資源 鎖與 SLA 幫助中心
免登入瀏覽方案・立即租用