クローニングのシンタックスを調べるのをやめよう — その代わりにジェネレーターがある
クロントークは、常に使っているものの、正確に覚えていないものです。ここでは、5つのフィールドが実際に意味するもの、人々に bite する間違い、そしてオンラインのクロントーク生成ツールがなぜより賢いアプローチなのかを説明します。
2時です。デプロイは6時です。cronジョブが正しい時間に実行されるかを二度確認する必要があります。そのため、新しいタブを開き、「cron syntax」とGoogleで検索します。また、同じようにします。
これは通過の儀式です。これまでのすべてのLinuxサーバーに触れた開発者は、少なくとも一度はこれを行いました。多くは、自ら認めたくないほど何度も行っています。cron表現は、頻繁に使いますが、なかなか覚えていません。その構文は、「簡単すぎて調べる必要がない」というと同時に、「もう少し特殊で間違えやすい」という不均衡な領域にあります。
もっと良い方法があります。使う オンラインのcron表現生成器 を用いて、構文の作成をツールに任せ、あなたが実際に重要なことに関心を持つようにします。
なぜcron構文が覚えられないのか
cronには5つのフィールドがあります。5つです。そして、その順番が人々を毎回混乱させます。
# ┌───────────── minute (0–59)
# │ ┌───────────── hour (0–23)
# │ │ ┌───────────── day of month (1–31)
# │ │ │ ┌───────────── month (1–12)
# │ │ │ │ ┌───────────── day of week (0–6, Sunday=0)
# │ │ │ │ │
* * * * * command
問題は難しいことではないのです。むしろ、十分な特殊文字が存在し、曖昧さを引き起こすのです。『5分ごと』か『5分の分』か?『9時』は9時(AM)か9時(PM)か?月のフィールドは1インデックスですが、曜日は0から始まっていることに気づいていないとどうなるか? */5 これらは初心者向けの問題ではありません。すべての人が直面する問題です。誤設定されたcronジョブは、プロダクション事故を静かに引き起こす方法の一つです。何もクラッシュしません。ただ、実行されず、3日後になって初めて気づくのです。 0 9 * * 1-5 5つのフィールド、簡潔に説明
ここに実用的なバージョンがあります。
分
(0–59) — ジョブが実行される時刻の分。
- 30分の時点を意味します。 15分ごとを意味します。
30時*/15(0–23) — 24時間制を使用。 - 9時(AM)を意味します。 5時(PM)を意味します。AM/PMの話は不要です。
9月の日17(1–31) — 月のカレンダー上の日。 - 1日は月の初日を意味します。 15日は15日を意味します。
1月15(1–12) — 1月は - 、12月は です。名前も使用可能です:
1、など。12曜日JAN,FEB(0–6または1–7) — 日曜日は - または に設定され、実装によって異なります。月曜日は常に
0または7です。これは最も混乱を引き起こすフィールドです。1重要な特殊文字
— すべての可能な値(すべての分、すべての時など)
*— すべての*/n間隔。 な分フィールドの*/5は5分ごとを意味します。a-b— 順番。1-5曜日フィールドのa,b,cは月曜日から金曜日を意味します。1,3,5— リスト。@reboot,@hourly,@dailyは月曜日、水曜日、金曜日を意味します。
— 短縮表現。すべての環境でサポートされていません。
よくある間違いが人々を傷つける
1. 時間帯を忘れる 0 9 * * * cronはサーバーのローカル時刻で実行されます。もしサーバーがUTCで、あなたがニューヨークにいるなら、
は東部時間の9時ではなく、4時または5時(DSTによって)に実行されます。常にサーバーの時刻帯を理解してください。常に。
2. 月の日と曜日の日を両方指定する と 月の日フィールドと曜日の日フィールド( * のいずれか)に値を指定すると、ほとんどのcron実装はそれらをORとして扱います。つまり、どちらかの条件が満たされたときにジョブが実行されます。これはほとんどが望ましくありません。
3. */1が「一度」を意味すると期待する
*/1 は、 *と同じです。これは「すべて」を意味します。標準的なcronでは「一度」を表現することはできません。その場合は at またはワンショットのsystemdタイマーを使用します。
4. 部署前にテストをしない
cronは即時フィードバックを提供しません。表現を書く、crontabを保存し、その後待つ必要があります。間違っている場合、3時頃にスケジュールされたバックアップが実行されないことに気づきます。そのため、部署前に cronの次回実行計算器 を使用するのは、30秒のコストを払う価値があります。
cron表現生成器を使用する
真実のアドバイス:記憶から手書きでcron表現を作ることをやめましょう。生成器を使用してください。それは弱さの証拠ではなく、プロダクションで間違ったことを避けるための方法です。
の IOToolsのcron表現生成器 を用いて、視覚的に表現を作成できます。分間隔、時、曜日を選択し、正確な表現と、実行される時間の英語説明を表示します。記憶の必要はありません。ドキュメントのタブを開く必要もありません。
表現を取得したら、それを cronの次回実行計算器に貼り付け、次の5~10回のスケジュール実行時間を取得します。5秒で終わり、あなたのクリーンアップジョブが毎分実行されるのではなく、毎日1回実行されているかをすぐに確認できます。
その2番目の確認が、多くの人がスキップします。スキップしないでください。
簡単な参考:実際に使う表現
| 表現 | 意味 |
|---|---|
* * * * * | 毎分 |
0 * * * * | 毎時間、時刻に実行 |
0 9 * * * | 毎日9時00分に実行 |
0 9 * * 1-5 | 平日9時00分に実行 |
*/15 * * * * | 15分ごと |
0 0 * * 0 | 毎週日曜日に午前0時実行 |
0 0 1 * * | 毎月の初日午前0時実行 |
30 4 1,15 * * | 月の1日および15日に午前4時30分実行 |
0 22 * * 1-5 | 平日午後10時00分に実行 |
@daily | 毎日午前0時1回実行(短縮表現) |
