30 2 * * *フィールド
| 分 | 30 | 30 |
|---|---|---|
| 時 | 2 | 2 |
| 日 | * | 任意 |
| 月 | * | 任意 |
| 曜日 | * | 任意 |
使える場所
| crontab | 30 2 * * * /path/to/script.sh |
|---|---|
| GitHub Actions | - cron: "30 2 * * *" (on.schedule) |
| Kubernetes CronJob | schedule: "30 2 * * *" |
crontab はサーバーのタイムゾーンで動作します。GitHub Actions は常に UTC を使います。
知っておきたいこと
30 2 * * * は毎日サーバー時刻の 02:30 に実行されます。トラフィックが少ないため、バックアップの定番の時間帯です。多くのタイムゾーンでは夏時間の切り替えに重なります。春の夜には現地時刻の 02:30 が存在せず、秋には 2 回訪れます。Vixie cron と Debian の cron はこれを補正し、スキップされたジョブは時刻が飛んだ直後に実行し、重複するジョブは 1 回だけ実行しますが、他のスケジューラーはそうしないかもしれません。
この問題は、01:00〜03:00 を避けてスケジュールするか、サーバーを UTC で動かすか、cronie で CRON_TZ=UTC を設定することで回避できます。Kubernetes の CronJob は spec.timeZone を設定しない限りコントローラーのタイムゾーンを使い、GitHub Actions は常に UTC を使います。夜間のバックアップは長引くことがあるので、flock -n を使い、出力をタイムスタンプ付きでログに残し、終了コードだけでなくリストアもテストしてください。隣の時間帯としては 30 3 * * * があります。