開発者ツール · Crontab ジェネレーター
cron に秒フィールドがない理由と 6 フィールドの式の由来
· 背景
クロン 方言 検証
6 フィールド式は、cron 式のように見えますが、cron 式ではありません。この投稿では、Unix cron が数分で停止する理由と、Quartz、Spring、およびクラウド スケジューラがどのように文法を拡張したかについて説明します。
6 フィールドの式は、このパーサーではなく、別のスケジューラー スタイルに属します。
ToolAcre は、空白で区切られた 6 つの部分を認識すると、それらを拒否し、その形式には分、時、日、月、曜日の 5 つの位置があると説明します。メッセージには、Quartz または systemd のような構文で先頭の秒スタイルが表示されることが記載されています。最初のトークンを黙ってドロップすることはありません。
この拒否により、位置の破損が防止されます。ソース文法を理解せずにトークンを削除すると、残っているすべての値が変更される可能性があります。翻訳は、各ソース フィールドが何を意味するのか、および意図したスケジュールが 5 フィールドのターゲットで表現できるかどうかを特定することから始まります。
リポジトリは、cron が分を使用する歴史的な理由ではなく、分ファーストの文法を証明しています
実装されたフィールド配列は分で始まり、平日で終わります。秒や年の指定はありません。テストでは正確なフィールド数が必要であり、短い式と長い式の両方が拒否されます。現在の文法を文書化するにはこれで十分です。
ワークブックでは、1 分に 1 回起動するデーモンに基づいて歴史的な説明が提供されました。このリポジトリには、その起源を証明するために必要なアーカイブ実装は含まれていません。したがって、記事には、ToolAcre のモデルには分単位の分解能があり、秒位置は存在しないとだけ書かれています。
先頭の秒スタイルを超えるクォーツの詳細はここでは実装されていません
ソース エラー メッセージでは、秒優先スタイルの例として Quartz が挙げられていますが、パーサーは Quartz 演算子やオプションの位置を実装していません。 `?`、`L`、`W`、`#` などの文字は、通常の値リーダーでは失敗します。これらは、サポートされている構文として翻訳または説明されません。
ToolAcre を Quartz バリデータとして使用することは避けてください。有効なソース式は、5 フィールド cron では表現できない関係をエンコードしている可能性があります。ソースドキュメントを読み、要件を言葉で述べ、ターゲット文法でサポートされている部分のみを再構築します。
Spring および Cloud スケジューラの文法は証拠セットの外にあります
ワークブック内のフレームワーク名とクラウド スケジューラ名には、独自の最新ドキュメントが必要です。リポジトリには、Spring、EventBridge、Kubernetes、または GitHub Actions のスケジュール スキーマがありません。フィールド数、エイリアス、およびタイムゾーン ポリシーをここで記憶から要約する必要はありません。
類似性は互換性ではありません。 2 つの製品は両方とも、異なる位置または日のセマンティクスを割り当てながら文字列 cron を呼び出すことができます。 ToolAcre の厳密な 5 フィールド パーサーは、意味を保持できない式を受け入れるのではなく境界で停止するため、価値があります。
作業例: 表現可能な平日の 40 分のスケジュールを再構築する
ソース要件が平日の 9 から 17 までの時間帯の 15 分ごとであり、追加の意味を持つ外部演算子がないと仮定します。 ToolAcre で表現可能な形式は `*/15 9-17 * * MON-FRI` です。パーサーは、15 分の 1 時間を拡張し、時間を含め、平日という名前を付けます。
説明とプレビューは、17:45 の最終日次候補を含む、ターゲットの解釈を公開します。同等の変換を呼び出す前に、ソース スケジューラの実際の動作と比較してください。 5 つのフィールドの形式は、翻訳中に確立された口頭での要件に対してのみ正しいです。
1 分未満のコマンド ループは生成されず、推奨されません
分は最小フィールドであるため、分未満の作業を表すことはできません。ワークブックではコマンド内のループを提案していましたが、ToolAcre はループを生成、実行、監視しません。このようなパターンでは、カレンダー モデル以外のタイミング、重複、シャットダウンの問題が生じます。
必要な解像度用に設計されたランタイムを選択し、そこで検証します。分のスロットに秒を入れて、秒の要件を 5 フィールド cron として偽装しないでください。場合によっては、数値検証に合格したにもかかわらず、結果として得られるスケジュールは遅くなり、意味的に異なります。
外国の月末演算子は未翻訳のままです
他の文法の月末演算子と曜日の序数演算子も範囲外です。それらを削除すると、日付が予期せず拡大または縮小される可能性があります。 ToolAcre は、通常の値、名前、範囲、リスト、ステップに加えて、文書化された別名をサポートします。そのセットは変換上限を定義します。
要件が上限を超える場合は、「表現できない」と報告し、それをサポートするスケジューラを保持するか、アクションを再設計します。偶然に解析される損失のある書き換えは、もっともらしいが不正確な将来の日付を作成するため、明らかな非互換性よりも悪いです。
要点: 貼り付ける前にフィールドを数え、ジェネレーターを使用して crontab が受け入れる 5 フィールドのバージョンを構築します
最初にフィールドをカウントし、次にソース方言を特定し、最後に句読点ではなく要件を翻訳します。 ToolAcre のエラーにより最初のステップが避けられなくなり、その説明では再構築後のターゲット側のチェックが提供されます。
ルートは 5 つのフィールドの式のみを生成します。秒、年、またはスケジューラ固有の演算子は検証されず、ジョブはスケジュールされません。これらの省略は、すべての移行に関する議論で常に目に見えるようにしておかなければならない信頼できる境界を定義します。