0 0 * * *フィールド
| 分 | 0 | 0 |
|---|---|---|
| 時 | 0 | 0 |
| 日 | * | 任意 |
| 月 | * | 任意 |
| 曜日 | * | 任意 |
使える場所
| crontab | 0 0 * * * /path/to/script.sh |
|---|---|
| GitHub Actions | - cron: "0 0 * * *" (on.schedule) |
| Kubernetes CronJob | schedule: "0 0 * * *" |
crontab はサーバーのタイムゾーンで動作します。GitHub Actions は常に UTC を使います。
知っておきたいこと
0 0 * * * はサーバーのタイムゾーンの 00:00 に実行されます。クラウドのマシンでは、手元の午前 0 時ではなく UTC であることが多いので、timedatectl で確認しましょう。@daily と @midnight は同じスケジュールの省略形です。午前 0 時は誰もが選ぶデフォルトなので、バックアップやレポート、他のテナントのジョブがその時刻にディスクやデータベースを奪い合います。17 0 * * * のような空いている時間帯のほうが、たいていは周りに優しい選択です。
cron は裸の % を改行として扱うので、crontab の中ではエスケープしてください。date -d yesterday +\%F は、夜間ジョブが通常処理すべき日付を返します。午前 0 時にサーバーが停止していても、標準の cron は後から実行しません。anacron や Persistent=true を指定した systemd タイマーなら実行します。Healthchecks.io や Cronitor のようなデッドマンスイッチを追加して、ジョブが黙って止まったときに気づけるようにしましょう。