跳到內容

OpenClaw 自動化排程故障排除:快速修復 Cron 與心跳機制

寫自動化最煩的就是東西沒跑,你卻不知道為什麼。不管是排程沒觸發,還是訊息沒傳出去,這種「靜默失敗」最讓人抓狂。這份指南會幫你快速定位問題,讓你不用再通宵通靈。

這篇文件主要處理排程與傳送相關的問題(cron + heartbeat)。

遇到問題時,建議你照著這個順序執行指令來檢查狀態:

Terminal window
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe

接著執行自動化檢查:

Terminal window
openclaw cron status
openclaw cron list
openclaw system heartbeat last

如果你的 cron 根本沒動,請檢查以下項目:

Terminal window
openclaw cron status
openclaw cron list
openclaw cron runs --id <jobId> --limit 20
openclaw logs --follow

正常的輸出應該長這樣:

  • cron status 顯示已啟用,且有一個未來的 nextWakeAtMs。
  • 任務(Job)已啟用,且有正確的排程與時區設定。
  • cron runs 顯示 ok 或明確的跳過原因。

常見的錯誤跡象:

  • cron: scheduler disabled; jobs will not run automatically:代表你在設定或環境變數中關閉了 cron。
  • cron: timer tick failed:排程器觸發失敗,請檢查前後的 stack 或 log 內容。
  • 執行輸出中出現 reason: not-due:代表你在任務還沒到期時手動執行,且沒有加上 --force 參數。

有時候任務確實跑了,但你卻沒收到訊息:

Terminal window
openclaw cron runs --id <jobId> --limit 20
openclaw cron list
openclaw channels status --probe
openclaw logs --follow

正常的輸出應該長這樣:

  • 執行狀態為 ok。
  • 獨立任務有正確設定傳送模式(Delivery mode)與目標。
  • Channel 探測顯示目標 channel 已連線。

常見的錯誤跡象:

  • 執行成功但傳送模式為 none:這代表系統本來就不打算發送外部訊息。
  • 缺少或無效的傳送目標(channel/to):任務在內部執行成功,但跳過了外部傳送步驟。
  • Channel 認證錯誤(unauthorized, missing_scope, Forbidden):傳送被 channel 的憑證或權限擋住了。

如果 heartbeat 沒反應,通常跟你的設定邏輯有關:

Terminal window
openclaw system heartbeat last
openclaw logs --follow
openclaw config get agents.defaults.heartbeat
openclaw channels status --probe

正常的輸出應該長這樣:

  • Heartbeat 已啟用且間隔(interval)不為零。
  • 最近一次 heartbeat 結果為 ran(或是你理解為什麼它被跳過)。

常見的錯誤跡象:

  • heartbeat skipped 且 reason=quiet-hours:目前處於 activeHours 設定的休息時間。
  • requests-in-flight:主通道正忙,heartbeat 被推遲執行。
  • empty-heartbeat-file:HEARTBEAT.md 檔案存在,但裡面沒有可執行的內容。
  • alerts-disabled:可見度設定抑制了 heartbeat 的外部訊息發送。

時區設定錯誤是自動化失效的頭號殺手,請務必檢查:

Terminal window
openclaw config get agents.defaults.heartbeat.activeHours
openclaw config get agents.defaults.heartbeat.activeHours.timezone
openclaw config get agents.defaults.userTimezone || echo "agents.defaults.userTimezone not set"
openclaw cron list
openclaw logs --follow

快速規則:

  • 如果看到 Config path not found: agents.defaults.userTimezone,代表該 key 未設定;heartbeat 會退而使用主機時區(如果有設定 activeHours.timezone 則優先使用)。
  • cron 如果沒加 --tz 參數,預設會使用 Gateway 主機的時區。
  • Heartbeat 的 activeHours 會根據你設定的時區解析順序(user、local 或明確的 IANA 時區)來決定。
  • 沒有帶時區資訊的 ISO 時間戳記,在 cron 的 at 排程中會被視為 UTC。

常見的錯誤跡象:

  • 主機時區變動後,任務在錯誤的牆上時間(wall-clock time)執行。
  • 因為 activeHours.timezone 設定錯誤,導致 heartbeat 在你的白天時間總是被跳過。

如果你還是搞不定,可以試試 AI Setup Assistant 來幫你診斷。

OpenClaw

OpenClaw Expert

還是卡住了?

如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。