cronの設定は「いつ」と「何を」を分けて考える
cronは決まった日時にコマンドを実行する仕組みです。ユーザーのcrontabでは、行の先頭に5項目の実行条件を書き、その後ろにコマンドを続けます。式だけをコピーしても、サーバーに処理が登録されるわけではありません。
ログの整理やバックアップなど、毎回同じ処理を行う運用に向いています。まず実行時刻を決め、式の値と次回実行日時を照らし合わせてください。日時の指定ミスと、スクリプトそのものの不具合を切り分けやすくなります。
毎日・毎週のスケジュールを作成する
- 設定例を選び、必要な項目だけ変更します。
- 複数の時刻を指定する場合は「範囲・リスト」を選びます。
- 既存のcrontabを確認するときは、コマンド部分を除いた5項目を直接入力します。
- UTCで表示される次の実行日時を確認し、式をコピーします。
cron式の読み方:分・時・日・月・曜日
項目は半角スペースで区切ります。日曜日は0または7です。月はJAN〜DEC、曜日はSUN〜SATでも指定できます。日本語の曜日名や全角数字は式の中では使用しません。
| 項目 | 範囲 |
|---|---|
| 分 | 0–59 |
| 時 | 0–23 |
| 日 | 1–31 |
| 月 | 1–12 |
| 曜日 | 0–7 |
- *:その項目のすべての値
- カンマ:複数の値を列挙(0,30)
- ハイフン:両端を含む範囲(1-5)
- スラッシュ:範囲内の間隔(
*/15)
そのまま確認できるcron式の例
「月〜金」は祝日判定ではありません。祝日を除外したい場合は、実行する処理の側で別途判定が必要です。
| cron式 | 実行タイミング |
|---|---|
*/5 * * * * | 毎時0分から5分おき |
0 3 * * * | 毎日3時 |
0 9 * * 1 | 毎週月曜日の9時 |
0 9 * * 1-5 | 月曜日から金曜日の9時 |
0 0 1 * * | 毎月1日の0時 |
0 0 29 2 * | うるう年の2月29日0時 |
crontab -eでサーバーに登録する
crontab -eで現在のユーザーの設定を開きます。次の例では、毎日2時30分にバックアップ用スクリプトを起動します。時刻の解釈はサーバー側の設定に従います。
コマンドには絶対パスを使い、実行権限やcronサービスの稼働状況も確認してください。ターミナルから実行できても、cronの実行環境では環境変数などが異なることがあります。
30 2 * * * /usr/local/bin/backup.shcron設定で迷いやすいポイント
日本時間で表示されますか?
実行日時のプレビューはUTC固定です。cron式自体にタイムゾーンは含まれません。日本時間で運用する場合は、スケジューラー側のタイムゾーンと照合してください。
5分おきは登録した時刻から数えますか?
いいえ。分の*/5は毎時0、5、10、15分などに一致します。登録時刻を起点にした経過時間の指定ではありません。
日と曜日を両方指定するとどうなりますか?
両方が制限されている場合はいずれかに一致すれば実行されます。0 9 1 * MONは毎月1日と毎週月曜日の9時です。どちらかが*で始まる場合は、両方の日付条件を満たす必要があります。
秒付きの式やQuartzにも対応していますか?
Linux標準の5項目のみ対応します。秒、?、L、W、#、@rebootは使用できません。@hourly、@daily、@weekly、@monthly、@yearlyは5項目に展開できます。
実行日時が5件出ないのはなぜですか?
探索範囲は今後8年間です。2月31日のような存在しない日付には一致せず、うるう日の指定では件数が少なくなります。
