Cron
Cron構文は、ジョブを実行するタイミングをスケジュールするために使用されます。
パイプラインスケジュールを作成したり、デプロイフリーズを設定して意図しないリリースを防いだりするために、Cron構文文字列の使用が必要になる場合があります。
Cron構文
Cronのスケジューリングでは、スペースで区切られた5つの数字を使用します。
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>(出典: Wikipedia)
Cron構文では、アスタリスク(*)は「every(すべて)」を意味するため、次のCron文字列は有効です。
- 毎時0分に1回実行:
0 * * * * - 毎日午前0時に1回実行:
0 0 * * * - 毎週日曜日の午前0時に1回実行:
0 0 * * 0 - 毎月1日の午前0時に1回実行:
0 0 1 * * - 毎月22日の午前0時に1回実行:
0 0 22 * * - 毎年1月1日の午前0時に1回実行:
0 0 1 1 * - 毎月2回、1日と15日の午前3時に実行:
0 3 1,15 * *
Cronの完全なドキュメントについては、crontab(5) Linuxマニュアルページを参照してください。LinuxまたはMacOSのターミナルでman 5 crontabと入力すると、このドキュメントをオフラインで参照できます。
さらに、GitLabはfugitを使用します。これは、#と%の構文を受け入れます。この構文は、すべてのCronテスターで動作するとは限りません。
- 毎月第2月曜日の午前0時に1回実行:
0 0 * * 1#2この構文は、fugitハッシュ拡張機能でサポートされています。 - 隔週日曜日の午前9時に実行:
0 9 * * sun%2この構文は、fugitmodulo拡張機能でサポートされています。
Cronの例
# Run at 7:00pm every day:
0 19 * * *
# Run every minute on the 3rd of June:
* * 3 6 *
# Run at 06:30 every Friday:
30 6 * * 5Cronスケジュールの記述例については、crontab.guruでさらに確認できます。
GitLabにおけるCron構文文字列の解析方法
GitLabでは、サーバー上でCron構文文字列を解析するためにfugitを使用し、ブラウザ上でCron構文を検証するためにcron-validatorを使用しています。また、ブラウザ上でCronを人間が読める文字列に変換するためにcRonstrueを使用しています。