コンテンツにスキップ

OpenClaw自動化トラブルシューティング:cronと配信エラーを解決

自動化タスクが予定通りに動かないと、原因探しに時間がかかってしまいますよね。なぜか Cron が動かない、あるいは動いているはずなのに通知が来ないといったトラブルは、開発者なら誰もが経験する悩みです。

このページでは、スケジューラーと配信に関する問題(cron + heartbeat)のトラブルシューティング方法を解説します。

コマンド・ラダー(優先順位)

Section titled “コマンド・ラダー(優先順位)”

まずは、問題の全体像を把握するために以下のコマンドを順番に試すのがベストです。

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 で有効(enabled)と表示され、将来の nextWakeAtMs が設定されている。
  • ジョブが有効で、正しいスケジュールとタイムゾーンが設定されている。
  • cron runs で ok または明確なスキップ理由が表示されている。

よくある兆候:

  • cron: scheduler disabled; jobs will not run automatically → 設定(config)または環境変数(env)で cron が無効になっています。
  • cron: timer tick failed → スケジューラーのティックがクラッシュしました。前後のスタックトレースやログのコンテキストを確認してください。
  • 実行出力に reason: not-due とある → --force なしで手動実行が呼ばれましたが、ジョブの実行時刻に達していません。

Cron は実行されたが配信されない場合

Section titled “Cron は実行されたが配信されない場合”

ジョブは起動しているのに、期待した通知やデータが届かない場合はこちらを確認します。

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

正常な出力の例:

  • 実行ステータスが ok である。
  • 独立したジョブに対して配信モード(delivery mode)とターゲットが設定されている。
  • Channel のプローブ結果で、ターゲットとなるチャンネルが接続済みと報告されている。

よくある兆候:

  • 実行は成功しているが配信モードが none である → 外部へのメッセージ送信は予定されていません。
  • 配信ターゲット(channel や to)が不足または無効 → 内部的な実行は成功しても、外部への送信はスキップされます。
  • チャンネルの認証エラー(unauthorized, missing_scope, Forbidden) → チャンネルの認証情報や権限によって配信がブロックされています。

Heartbeat が抑制またはスキップされる場合

Section titled “Heartbeat が抑制またはスキップされる場合”

Heartbeat が動いていない、あるいはメッセージが飛ばない場合は以下のコマンドを使います。

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

正常な出力の例:

  • Heartbeat が有効で、0 以外のインターバルが設定されている。
  • 直近の Heartbeat の結果が ran である(またはスキップ理由が妥当である)。

よくある兆候:

  • heartbeat skipped かつ reason=quiet-hours → activeHours の時間外です。
  • requests-in-flight → メインレーンが混雑しているため、Heartbeat が後回しにされました。
  • empty-heartbeat-file → HEARTBEAT.md は存在しますが、実行可能な内容が含まれていません。
  • alerts-disabled → 表示設定(visibility settings)により、外部への Heartbeat メッセージが抑制されています。

タイムゾーンと activeHours の注意点

Section titled “タイムゾーンと activeHours の注意点”

時間のズレに関する問題は、設定値を直接確認するのが近道です。

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 と表示される場合は、キーが未設定です。Heartbeat はホストのタイムゾーン(または設定されていれば activeHours.timezone)を使用します。
  • --tz なしの Cron は、Gateway ホストのタイムゾーンを使用します。
  • Heartbeat の activeHours は、設定されたタイムゾーン解決(user, local, または明示的な IANA タイムゾーン)を使用します。
  • タイムゾーン指定のない ISO タイムスタンプは、Cron の at スケジュールにおいて UTC として扱われます。

よくある兆候:

  • ホストのタイムゾーン変更後、ジョブが意図しない時刻に実行される。
  • activeHours.timezone が誤っているため、日中であっても Heartbeat が常にスキップされる。

AI Setup Assistant

OpenClaw

OpenClaw Expert

まだ解決しませんか?

このページで解決しない場合は、OpenClaw Expertに直接質問してください。