Codex trouble guide

cronが動かない時の確認

cronが動かない時の確認方法を整理します。手動実行、node/phpパス、ログ、flock、時刻、管理画面cron、翌日確認を扱います。

このページは非公式の実務ガイドです。重要な判断は人間が行い、最新情報は提供元の情報も確認してください。
trouble-check.md
stop:
  - unclear_cause
  - risky_change
check:
  - public_url
  - changed_files
  - rollback_scope

このページで分かること

cronが動かない時の確認方法を整理します。手動実行、node/phpパス、ログ、flock、時刻、管理画面cron、翌日確認を扱います。

起きている症状

手動では動くのに定期実行されない、ログが出ない、出力ファイルの更新時刻が変わらない状態です。

最初に確認すること

「手動では動くのにcronで動かない」原因の大半は、手動実行時とcron実行時で環境が違うことにあります。cronは最小限の環境変数しか持たずに実行されるため、手動なら通るパスや設定が通らないのです。この前提を頭に置いて、次の順で確認します。

確認やり方そこから分かること
手動実行が成功するかcronに書いたコマンドをそのままシェルで実行手動で失敗するなら、cron以前に処理自体の問題
実行コマンドのパスnode、php等をフルパス(/usr/bin/php など)で書いているか確認cron環境ではPATHが最小限のため、フルパスでないと見つからない
ログ保存先に書き込めるかコマンド末尾に >> /path/to/log 2>&1 を付けて出力を捕捉「動いていないのか、動いてエラーなのか」がここで初めて分かる
flock等の重複防止が邪魔していないかロックファイルが残っていないか確認前回の異常終了でロックが残り、以降の実行がすべてスキップされる事故
実行時刻とタイムゾーンサーバーのタイムゾーン(JSTかUTCか)を確認「朝9時のつもりが実はUTC9時(日本の18時)」というずれ
翌日に更新時刻を見る出力ファイルのタイムスタンプを翌日確認設定変更が本当に効いたかは、次の定時実行まで分からない

デバッグの近道は「2>&1でログを取る」ことに尽きます。ログさえあれば原因の9割はメッセージに書いてあります。逆にログなしの状態でcron設定をいじり続けるのは、目隠しで作業しているのと同じです。設定時の予防はcron設定チェックリストを参照してください。

Codexに再確認させる指示文

cronが動いていない可能性があります。手動実行、実行コマンド、node/phpの場所、ログ、flock、実行時刻、出力ファイル、翌日確認項目を確認し、cron登録は変更せず報告してください。

やってはいけないこと

  • 手動実行に失敗したままcron登録する
  • 既存cronを上書きする
  • ログなしで原因を判断する
  • 同じcronを重複登録する

戻す判断

既存cronを壊しそうな場合は変更せず停止します。手動実行とログ確認が通ってから登録や修正へ進みます。

確認チェックリスト

  • 手動実行が成功する
  • ログが残る
  • 出力ファイルが壊れていない
  • 重複cronがない
  • 翌日に実行記録がある

次に読むページ