インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る
問題発生時のトラブル解決ガイド

cron・crontabが実行されない原因と確認手順

このページの目的

cronがジョブを呼び出す前の段階を確認します。最終的なゴールは、「登録されていない」「cronが動いていない」「時刻・書式が違う」「呼び出した後に失敗した」のどれかに分けることです。

最初にやること

最初に正しいユーザーのcrontabへ登録されているか、cronサービスが稼働しているか、予定時刻に実行記録があるかを確認します。実行記録があるなら、スクリプト側の失敗へ切り替えて調査します。

このページの対象:このページは「cronがジョブを呼び出していない」場合が中心です。cronの実行記録はあるのに処理だけ失敗する場合は、cronスクリプトが失敗するガイドを確認してください。

cron設定を作成・確認

実行時刻とコマンドを入力して、cron式と確認ポイントを整理できます。

cron設定ツールを使う

最初に実行記録の有無を確認する

予定時刻のログを確認し、調査の入口を決めます。

crontab -l systemctl is-active crond || systemctl is-active cron journalctl -u crond --since today --no-pager || journalctl -u cron --since today --no-pager

よくある表示・症状から原因を絞る

表示された文言は原因そのものではなく、確認範囲を絞る手掛かりです。「考えられる原因」と「最初の確認方法」を対応させて確認します。

エラー・症状考えられる原因最初の確認方法
command not foundPATH不足、またはコマンド名・配置場所の誤りcommand -v で実体を確認し、crontabでは絶対パスを使用
Permission deniedスクリプトの実行権限、出力先権限、親ディレクトリの通過権限不足id と namei -l で実行ユーザーと対象パスを確認
No such file or directory相対パス、shebang、参照ファイル、CRLF改行などの不一致pwd、head -1、file で実行環境とファイル形式を確認
bad minute / errors in crontab filecron式のフィールド数・値・記号などの書式誤り登録時のメッセージと crontab -l の該当行を確認
CRON ... CMD (...) はあるが処理結果がないcronの起動までは成功し、コマンドまたはスクリプト内部で失敗している標準出力・標準エラーをファイルへ保存し、終了コードを確認
ログに実行記録がない別ユーザーへ登録、cronサービス停止、時刻・タイムゾーン条件の不一致対象ユーザーのcrontab、systemctl status、時刻・タイムゾーンを確認

原因を切り分ける確認手順

  1. 登録内容を確認する

    crontab -l sudo crontab -u appuser -l

    別ユーザーのcrontabへ登録していないか、保存できているか確認します。

  2. cronデーモンを確認する

    systemctl is-active crond || systemctl is-active cron

    停止している場合は、起動前にサービスログで原因を確認します。

  3. 同じユーザーで手動実行する

    sudo -u appuser /opt/scripts/backup.sh

    手動でも失敗するなら、cronではなくスクリプトや権限の問題です。

  4. 絶対パスと出力先を指定する

    cronはログインシェルより環境変数が少ないため、まずコマンドと出力先を絶対パスにして再実行します。

    /usr/bin/python3 /opt/app/job.py >> /var/log/app/job.log 2>&1

    PATHの決まり方やcrontab内での設定例は、cronでPATHが通らない原因と対策に分離しています。

  5. cronのログを確認する

    journalctl -u crond --since today --no-pager journalctl -u cron --since today --no-pager

    ディストリビューションによっては/var/log/cronやsyslogにも記録されます。

cron特有の環境差

項目注意点
PATH対話シェルより短いことがあります。絶対パスまたはcrontab内のPATHを使います。
カレントディレクトリ期待したディレクトリとは限りません。スクリプト内でcdするか絶対パスを使います。
環境変数シェル初期化ファイルが通常は読み込まれません。必要な値を明示します。
%実装によってコマンド部分の未エスケープ%が改行として扱われるため、必要なら\%とします。
/etc/cron.d時刻フィールドの後に実行ユーザー欄が必要です。

この症状で多い原因

修正後の確認と再発防止

検証中は一時的に短い間隔へ変更するより、テスト専用の無害なジョブを使うほうが安全です。

* * * * * /usr/bin/date >> /tmp/cron-test.log 2>&1
確認後はテストジョブを必ず削除してください。本番処理を毎分に変更すると、重複実行や負荷増加を起こすことがあります。

cron設定を作成・確認

実行時刻とコマンドを入力して、cron式と確認ポイントを整理できます。

cron設定ツールを使う