OpenClaw 自動化排程故障排除:快速修復 Cron 與心跳機制
寫自動化最煩的就是東西沒跑,你卻不知道為什麼。不管是排程沒觸發,還是訊息沒傳出去,這種「靜默失敗」最讓人抓狂。這份指南會幫你快速定位問題,讓你不用再通宵通靈。
自動化故障排除
Section titled “自動化故障排除”這篇文件主要處理排程與傳送相關的問題(cron + heartbeat)。
遇到問題時,建議你照著這個順序執行指令來檢查狀態:
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctoropenclaw channels status --probe接著執行自動化檢查:
openclaw cron statusopenclaw cron listopenclaw system heartbeat lastCron 沒有觸發
Section titled “Cron 沒有觸發”如果你的 cron 根本沒動,請檢查以下項目:
openclaw cron statusopenclaw cron listopenclaw cron runs --id <jobId> --limit 20openclaw 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參數。
Cron 已觸發但未傳送
Section titled “Cron 已觸發但未傳送”有時候任務確實跑了,但你卻沒收到訊息:
openclaw cron runs --id <jobId> --limit 20openclaw cron listopenclaw channels status --probeopenclaw logs --follow正常的輸出應該長這樣:
- 執行狀態為
ok。 - 獨立任務有正確設定傳送模式(Delivery mode)與目標。
- Channel 探測顯示目標 channel 已連線。
常見的錯誤跡象:
- 執行成功但傳送模式為
none:這代表系統本來就不打算發送外部訊息。 - 缺少或無效的傳送目標(
channel/to):任務在內部執行成功,但跳過了外部傳送步驟。 - Channel 認證錯誤(
unauthorized,missing_scope,Forbidden):傳送被 channel 的憑證或權限擋住了。
Heartbeat 被抑制或跳過
Section titled “Heartbeat 被抑制或跳過”如果 heartbeat 沒反應,通常跟你的設定邏輯有關:
openclaw system heartbeat lastopenclaw logs --followopenclaw config get agents.defaults.heartbeatopenclaw 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 的外部訊息發送。
時區與 activeHours 的坑
Section titled “時區與 activeHours 的坑”時區設定錯誤是自動化失效的頭號殺手,請務必檢查:
openclaw config get agents.defaults.heartbeat.activeHoursopenclaw config get agents.defaults.heartbeat.activeHours.timezoneopenclaw config get agents.defaults.userTimezone || echo "agents.defaults.userTimezone not set"openclaw cron listopenclaw 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 Expert
還是卡住了?
如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。