開発者ツール · Crontab ジェネレーター
Cron ステップと範囲の構文: */15, 1-5、リストとそれらの組み合わせ方法
· 仕組み
クロン スケジュール設定 開発者ワークフロー
ステップ、範囲、リストは、人々が理解せずにコピーする cron 構文の一部です。この投稿では、それぞれについて、どのようにネストされるか、および */7 が「7 日ごと」を意味しないなどの驚きについて説明します。
15 分ごと、ただし 9 から 5 までのみ — 素朴な式は夜にも起動します
「営業時間中は 15 分ごと」には 2 つの独立した制限が含まれます。分のフィールドには 45 分のマークが必要ですが、時間のフィールドには制限されたスパンが必要です。 `*/15 * * * *` のみを記述すると、前半は解決されますが、依然として一晩中実行されます。式では、平日について何かを述べる前に、両方の制約をエンコードする必要があります。
ToolAcre はコマンドではなく、5 つのスケジュール フィールドを解析します。 `*/15 9-17 * * 1-5` から始めて、文と次回実行プレビューを検査します。このチェックでは、`9-17` を分の位置に置いたり、曜日フィールドを無制限のままにしたりするというよくある間違いを検出します。ジェネレーターは式を作成して説明します。ジョブのインストールや実行は行いません。
範囲 — 単一フィールド内の包括的な範囲としての 1-5 および 9-17
ハイフンは、1 つのフィールド内に包含範囲を作成します。時の位置の `9-17` は、9 から 17 までの 9 つの値に展開されます。同様に、平日の位置の `1-5` は、月曜日から金曜日まで展開されます。これは、このパーサーが日曜日を 0 に、月曜日を 1 にマップするためです。両方のエンドポイントが参加しているため、17:00 は選択された時間範囲内にあります。
フィールド境界を越えて範囲を折り返すことはできません。パーサーは、`17-9` などの逆方向形式を拒否し、必要な値を 2 つのリスト項目に分割することを提案します。ラッピング ルールはスケジュール製品ごとに異なるため、この拒否は便利です。ここで、範囲は、フィールドの数値または許容される名前の制限をすでに満たしている値の間で常に上方に移動します。
ステップ - */15 および 9-17/2,、およびステップが継続的にカウントせずにフィールドの下限で再開される理由
スラッシュは、開始点から n 番目ごとの値を選択します。分フィールドの `*/15` は最小値の 0 から始まり、0、15、30、45 まで拡張されます。 `9-17/2` は 9 で始まり、9、11、13、15、および 17 になります。ステップは 1 つのフィールドに属します。時間の境界を越えた経過分はカウントされません。
パーサーは、ステップによるベアスタートも受け入れます。分フィールドの `5/15` は、暗黙的な上限エンドポイントが 59 であるため、5、20、35、および 50 を意味します。ステップは正の整数である必要があり、フィールドの全範囲のサイズを超えることはできません。ゼロ、非数値、またはオーバーサイズのステップは、推測された解釈ではなく、フィールド固有の検証エラーを受け取ります。
リストでは、値、範囲、段階的な範囲を 1 つのフィールドに組み合わせることができます
同じフィールド内の複数の部分をカンマで結合します。単純な `1,15,30` は 3 つの分の値に名前を付けます。より複雑な入力では、単独の値、包括的な範囲、段階的な範囲を組み合わせることができます。テストされた `0,10-20/5,59` は、0、10、15、20、および 59 に拡張されます。重複した結果が削除され、展開された値は後の計算で使用される前に並べ替えられます。
この文法は構成的ですが、それでも狭いです。各カンマ項目にはスラッシュを 1 つ含めることができ、範囲には空ではないエンドポイントが 2 つだけ含まれている必要があります。抜け落ちたカンマ、複数のスラッシュ、または未完成の範囲は、フィールドに名前を付ける理由とともに拒否されます。これにより、不正な句読点に従来の意味があるかのように装うことなく、混合表現をレビュー可能にすることができます。
有効な例: */15 9-17 * * 1-5 — 生成される分数と 17:45 エッジ ケースを列挙します。
`*/15 9-17 * * 1-5` の場合、分の値は 00、15、30、および 45 です。時間は 09 から 17 までです。平日の値は月曜日から金曜日までです。含まれる各平日の最初の候補は 09:00 で、最後の候補は 17:45 です。 18 は時間の範囲外であるため、18:00 はありません。
最終実行エッジは、フィールド拡張が会話の短縮表現に勝る理由を示しています。 「9 時から 5 時まで」とは、ある読者に対しては 17:00 で停止し、別の読者に対しては 5 時全体を含めることを意味する場合があります。 Cron の時間フィールドは時間バケットを選択し、分フィールドはその中の位置を選択します。 17:45 が不要な場合、目的の境界には別の式またはコマンド側ロジックが必要です。
月次ステップは、毎月 1 日から拡張されます。経過週の間隔ではありません
`*/7` は、そのフィールドの最小値 1 から拡張され、これらの日付が存在する場合、 1、 8、 15、 22、 29 が生成されます。翌月が始まると、フィールドは再び 1 から始まります。したがって、連続的に進む 7 日間の間隔ではなく、選択された暦日を記述します。 2 月以降の月には、単に最高の日付がいくつかありません。
同じ構文の別のフィールドに異なる開始値があります。 `*/7` 分は 0 に始まり、`*/7` 日は 1 に始まります。 ToolAcre のパーサーは各フィールド仕様からシーケンスを導き出し、そのプレビューはカレンダーの日付を検索します。実際の週次のリズムの場合は、月の日単位のステップを経過時間として扱うのではなく、曜日を制限します。
サポートされていない演算子は、別の cron 方言として解釈されずに拒否されます。
この 5 フィールドのパーサーは、`L`、`W`、`#`、または `?` を実装しません。これらの文字は黙って破棄されず、移植可能な crontab 構文として表示されません。 6 つのフィールドも拒否され、追加の先頭位置はこのルートが読み取る形式ではなく、秒指向のスケジューラ スタイルに属するという説明が付けられています。
境界は意図的に設定されています。ここでは、分、時、日、月、曜日が完全な位置文法です。別のスケジューラから式を移動する前に、そのフィールドをカウントし、その演算子を特定します。ジェネレーターは独自の方言を検証できます。 Quartz、systemd カレンダー構文、またはクラウド サービスのバリエーションを認証することはできません。
要点: ステップは「範囲の下端から開始する」という意味です。ジェネレーターはステップ式を確認できる言葉で説明します。
範囲は、包括的なスパン、カンマで結合された部分、およびフィールド固有の開始からのサンプル値をスラッシュで定義します。これらの操作をその順序で読み取ると、密なトークンが検査可能な有限セットに変換されます。また、作成者が別のことを意図した可能性があるコピーされたフレーズに依存せずに、17:45 などのエッジについても説明します。
ジェネレーターをレビュー画面として使用します。式を入力し、説明を読み、警告を調べ、目的のゾーンで次の 5 つの実測時間を比較します。次に、検証済みの 5 つのフィールドを独自の環境内の実際のコマンドの横に配置します。スケジュールの構築とジョブの実行は、引き続き個別の責任となります。