インフラ作業支援ラボInfra Support Lab ← ガイド一覧← 戻る

crontab: bad minuteの原因と修正方法|cron式・登録形式を確認

crontabの登録時にbad minuteやerrors in crontab file, can't installが表示される場合、cron式の先頭フィールド、登録先に応じた書式、不可視文字を順番に確認して安全に修正します。

このページの目的

登録前に止まっているcron式の構文エラーだけを扱います。登録には成功するが予定時刻に実行されない場合や、実行したスクリプトが失敗する場合は別ガイドに分けます。

最初にやること

現在のcrontabをバックアップし、エラー行の先頭5フィールドを確認。crontab -e用か/etc/cron.d/用かを先に見分けます。

このページの対象:bad minuteなどのcrontab登録時のエラーです。実行環境のPATHや出力先権限はcronスクリプト失敗ガイドで扱います。

書式を登録前にレビュー

構文を直しても、対象ユーザーや標準出力の扱いで運用事故が起こり得ます。登録形式とコマンドも合わせて確認してください。

cron設定ツール

bad minuteは通常、crontabの登録構文に問題がある状態

多くのcron実装では、bad minuteは時刻指定の最初の「分」フィールドの解釈に失敗したことを示します。ただし、分そのものが誤りとは限りません。時刻欄より前の不要な文字、登録先の違い、フィールドのずれなどでも発生します。

障害範囲を分ける:このエラーはジョブが予定どおり走る前段の問題です。systemctl restart cronや再起動を最初に実施しても、誤った書式の修正にはなりません。

ユーザーcrontabは5フィールド、/etc/cron.dはユーザー欄が必要

登録先行の形式注意
crontab -e分 時 日 月 曜日 コマンド時刻5項目の後にコマンド。ユーザー名は入れない
/etc/crontab・/etc/cron.d/*分 時 日 月 曜日 ユーザー コマンド多くのVixie/Cronie系cronではユーザー名を指定する
# ユーザーcrontab(crontab -e)の例 */5 * * * * /usr/local/bin/health-check # /etc/cron.d/等のシステムcrontabの例 */5 * * * * root /usr/local/bin/health-check

システム用の行をユーザーcrontabへそのまま貼り付けると、ユーザー名がコマンドの一部として解釈され、別の障害につながる場合もあります。登録形式を揃えることが重要です。実装差があるため、OSに付属するcrontab(5)を優先してください。

最初は現在設定を保存し、エラー行を確認

# 既存登録内容を退避(自分のユーザーのcrontab) crontab -l > crontab-backup.txt # 既存内容を確認 crontab -l # システム用は管理者権限・構成管理下で確認 sudo ls -l /etc/cron.d sudo sed -n '1,120p' /etc/crontab

スケジュールの意味と登録先の形式を見てから、エラーで示された行番号や、行頭に想定外の文字列がないか確認します。現在のcrontabが存在しない場合、crontab -lはエラーを返すことがあります。バックアップ先ファイルには認証情報や機密コマンドが含まれる可能性があるため、保管・共有には注意してください。

値の範囲、記号、フィールドのずれを修正

誤った例問題修正の考え方
60 * * * *分の範囲外通常は0〜59。目的の時刻を再指定
*/0 * * * *ステップ0は無効1以上の間隔値を指定
5 * * *時刻欄が1項目不足5フィールドを揃えてからコマンドを記載
5, * * * *末尾カンマなど区切りの誤りカンマ区切りの各値を見直す
# 5 * * * * ...コメント行そのままなら登録されない。実行したい場合は#を外して構文を確認

標準的な時刻範囲は分0〜59、時0〜23、日1〜31、月1〜12、曜日0〜7(0と7が日曜)です。ただし拡張構文や曜日名などは実装で異なるため、手元のmanページに合わせて確認します。

全角記号・CRLF・不可視文字を確認

# エラーを起こす候補ファイルを表示形式つきで確認 sed -n '1,80l' candidate.cron # ファイル形式の確認 file candidate.cron

全角アスタリスク、全角数字、ノーブレークスペース、Windows形式CRLF改行などが混じると、一見正しいcron式でもパーサーが受け付けないことがあります。sed -n 'l'で行末や制御文字を表示し、コピー元の文字を確かめます。

登録前に安全に検証する

既存crontabを置き換える前に、cron設定ツールと対象OSのmanページで時刻指定を検証します。Cronieの一部バージョンではcrontab -T ファイルによる構文検証が利用できますが、全環境で使えるオプションではありません。man crontabで対応を確認してください。

man 5 crontab man 1 crontab # Cronieなどで -T が提供される場合のみ crontab -T candidate.cron
誤って全件置換しない:crontab candidate.cronは既存のユーザーcrontabを置き換えます。差分確認・バックアップをせず実行しないでください。crontab -rも安易に実行しません。管理された構成では適用方法を管理者・変更手順に合わせます。

修正しても登録できない場合の分岐

結果次の確認
bad minuteが続くエラー行の先頭、空白、全角文字、日時5フィールド、曜日範囲を再確認
bad hourなど別のエラーに変化次のフィールドの範囲と区切り文字を確認。エラーが変わっても未修正の欄が残る場合あり
登録はできたが実行されないcron未実行ガイドでユーザー、サービス、時刻、ログを切り分ける
実行記録はあるが処理が失敗スクリプト失敗ガイドでPATH・作業ディレクトリ・権限を確認
システムcronだけ失敗/etc/cron.dの所有者・モード・ユーザー欄、対応するcron実装、syslogを確認

修正後は登録と実行を分けて確認

# ユーザーcrontabの登録内容を再確認 crontab -l # 使用環境に応じてログを確認 journalctl -u crond -b --no-pager -n 80 journalctl -u cron -b --no-pager -n 80

登録完了後に次回実行時刻とタイムゾーンを確認し、実際にジョブが実行されたか、結果が成功したかをログやアプリの出力で検証します。crondとcronのUnit名は環境で異なります。登録できたことは正常実行を保証しません。

公式・一次資料