Command Palette

Search for a command to run...

Cron Expression Generator: 信頼できる Crontab スケジュールを構築します

Cron Expression Generator: 信頼できる Crontab スケジュールを構築します

T
Toolz Team
|Aug 23, 2026|16 分読んでください

時間と日付 コレクションの一部

私が今まで引き起こした最悪のプロダクションバグがcron表現の1 文字でした私は毎晩真夜中にデータベースのバックアップを実行したかったのです。 と書いた 0 0 * * * 頭の中で、タイプしました 0 0 * * 0 crontab に入り、先に進みました。ジョブは 1 回実行されました - 次の日曜日 - その後、1 週間は実行されませんでした。存在しないバックアップが必要なときにわかりました。その 1 つの置き忘れられた桁が "every day" を " に変換しました。 every Sunday, " そして構文には何も警告されませんでした。クロンは、あなたが言ったことを正確に、静かに、永遠に実行します。

tl;dr: ザ・ Cron 式ジェネレーター プレーンフィールドまたはワンクリックプリセットから標準的な5 フィールドのcrontab式を構築し、入力すると文で説明し、UTCで次の実行時間をプレビューして、本番環境に到達する前にスケジュールを確認できるように、ブラウザで完全に実行されます - アカウントもアップロードもありません。

私は再び私の頭の中でチェックしただけだったスケジュールをコミットしたくなかったので、私はToolz.devのためにこのツールを構築しました.cron式をプレーンな英語として戻って読み、それが発射する実際の日付を見ることがキャッチします 0 ーversusー * 瞬時に間違えるクラス。このガイドでは、cron 構文がどのように機能するか、ほぼすべての人を魅了するインタラクション、ジェネレーターを使用して信頼できる式を生成する方法について説明します。

クロン表現とは?

クロン式は5 つのフィールドをスペースで区切って構成したコンパクトなスケジュールで、左から右は分、時、月、月、曜日です。 five-field フォームは、で POSIX によって指定されています crontab エントリーフォーマット。 スケジューラ - 古典的な Unix cron デーモンだけでなく、ci システム、Kubernetes CronJobs、無数のタスク ランナーも式を読み取り、すべてのフィールドに一致するジョブをあらゆる瞬間に起動します。

各フィールドは単一の数字よりも多くを受け入れます。 星()*) は "every" というフィールドの値を意味します. のようなリストです. 1,15,30 はいくつかの特定の値を意味する。 のような範囲 1-5 は包含的なスパンという意味である。 のようなステップ */15 手段 "every fifteenth" フィールドから始まる値' s minimum.あなたは、ほとんどすべての定期的なスケジュールを記述するために、5 つのフィールドにわたってこれらを組み合わせる:毎分、毎四半時間、平日午前8 時、毎月最初の、最後の四半期' sオープニング日電力は、リアルであり、密度も-5 つのフィールドは、驚くほど正確なスケジュールをエンコードすることができます、それは正確に彼らが微妙に間違って取得しやすい理由です。

ここでは、ジェネレーターが使用するフィールド レイアウトを、それぞれに対して有効な範囲とともに示します:

位置 フィールド 範囲 注意事項
1です 0~59
2です アワー 0~23 24時間時計
3つです 月の日 1–31
4です 1~12 JAN– だよDEC も 承り
5です 曜日 0~6 0 と 7 はどちらも日曜日を意味します; SUN– だよSAT 受け入れ

式を手書きで書くのではなく、なぜ式を生成するのか

手でcronを書くことは、ジョブが実行されるか失敗するまでフィードバックなしで、フィールドの順序、範囲、および相互作用を正しく覚えていた賭けです ジェネレータはその賭けを確認に置き換えます フィールドに入力すると、一度に3 つのことが行われます。

まず、式を組み立てて検証し、範囲外の値、逆の範囲、不正なステップを捕捉し、問題のあるフィールドに名前を付けるメッセージを表示します。 のような式 0 25 * * * 25 時間目は存在しませんが、受け入れられるのではなく説明とともに拒否され、黙って実行されることはありません。

第二に、スケジュールを文としてレンダリングします。 0 8 * * 1-5 " 月曜日から金曜日までの08:00 になる" スケジュールを言葉で読むことは、あなたが構築したものがあなたが意味したものではないことに気づくための最速の方法です。 " 日曜日の00:00 " の代わりに" 00:00." を読んだ瞬間、私の真夜中のバックアップのバグは明らかだったでしょう

第三に、実際の今後の実行時間をプレビューします 今夜ではなく3 ヶ月後に次のジョブが起動することを見て、アスタリスクを見つめるよりもはるかに直感的に何かが間違っていることがわかります このプレビューでは、不可能なスケジュールもキャッチします - 2 月の30 日を尋ねると、ジェネレーターは今後の実行がまったくないことを示します。

Cron Expression Generatorの使い方

ステップ1: プリセットまたは空白のスレートから始めます

正しい式への最速のルートは、すでに近いものから始めることです。 " 週の午前 8 時、" " 15 分ごと、" または " 月初の午前 0 時、" などのプリセットを選択し、フィールドがロードされて調整する準備が整います。当てはまらない場合は、毎分のデフォルトから開始して下に編集します。実際のスケジュールのほとんどは 12 個の一般的なパターンのバリエーションであり、既知の良い式から始めると、間違いというカテゴリ全体が排除されるため、プリセットが存在します。

ステップ2:5 つのフィールドを設定します

各フィールドに値を入力するか、そのままにします * "every." の場合 各フィールドは単一の値、カンマリスト、ハイフン範囲、またはスラッシュステップを受け入れます たとえば、平日の営業時間中に毎時の上部に実行するには、分を に設定します 0、 アワートゥー 9-17、 と 曜日 に 1-5、月日および月を として残す *。各フィールドの下のヒントは、その有効な範囲を思い出させるため、順序を記憶する必要はありません。

ステップ 3: 平易な英語の説明を読んでください

入力しながら説明の更新を見てください これはあなたを救うステップです あなたの頭の中のスケジュールと文が一致しない場合、表現は間違っており、1 週間後の生産ではなくブラウザで判明した時間、日、および任意の月の制限を確認します あなたが意図する方法を読んでください。

ステップ4: 次の実行を確認してコピーします

UTC で計算された今後の実行時間をクリックしてプレビューします。驚くべきことがあればスキャンしてください。ギャップが長すぎる、最初の実行が遠すぎる、または不可能な日付を通知する空のリストなど。スケジュールが適切に見える場合は、式をコピーして、crontab、パイプライン、または CronJob マニフェストに貼り付けます。

月日と週の罠

Cronについて1 つ覚えているなら これにして下さい 初めてほぼ全員が驚かされるからです いつ 両方 月次フィールドと週次フィールドは制限されており、どちらも制限されていないことを意味します * - 標準クロンは、AND ではなく OR と組み合わせます。ジョブはいつ実行されますか どちらか 条件が一致します.

だから 0 0 13 * 5 は " midnight on Friday the 13th." 意味 " midnight on friday the 13th of 毎月, そしてまた midnight on every friday." それらは非常に異なるスケジュール; 2 回目は月に何度も発射されるこの動作は、ほとんどのスケジューラーが継承する元のVixie cron実装から直接来ており、ジェネレーターは正確にそれを尊重します。 その次の実行プレビューでは、13 日と金曜日の両方が表示されます。これは、意図しない OR をキャッチするための最も明確な方法です。

実際のルールは、2 日間のフィールドのうちの 1 つを次のように残すことです * orの動作を心から望まない限り. " Friday the 13th only, " cronが1 つの式で表現できないことが本当に必要な場合 - あなたは、ジョブでそのロジックを処理します.プレビューで実際の実行日を見ることは、これを潜んでいるgotchaから明白で目に見える事実に変えるものです.

実際の手順、範囲、リスト

ステップ構文は、多くのスケジューリング能力が存続し、多くの混乱が始まる場所です。 */5 in the minute field means minutes 0, 5, 10, 15, and so on to 55 - "every five minutes." ステップを次の範囲にアンカーできます: 0-30/10 は分 0, 10, 20, 30 のみを意味する. step を持つ bare 値, のような 5/15 分単位のフィールドでは、" を意味します。 5 から始めて、15&quot ごとに;フィールド最大値 - 5、20、35、50 まで。

リストと範囲は自由に組み合わされます。 1,4,7,10 月のフィールドには、1 月、4 月、7 月、10 月の四半期スケジュールが表示されます。 1-5 曜日は月曜日から金曜日までです。 9-17 in the hour field gives you a nine-to-five window.それらを混ぜると、 0 9-17 * * 1-5 " として読む午前 9 時から午後 5 時まで、月曜日から金曜日まで毎時 0 分まで " - 一般的な営業時間のハートビート。ジェネレーターはこれらすべてを拡張して検証し、説明では構築したものを詳しく説明しているため、たとえば、範囲が包括的であるかどうかについては曖昧さはありません (そうです)。

よくある使用例

予定されているバックアップとメンテナンス. 正規の cron ジョブ。 を生成します 0 2 * * * 毎晩午前2 時のバックアップについては、説明を読んで、それが毎週ではなく毎日であることを確認し、次の実行をプレビューして、最初のものが今夜であることを確認します これは私が何年も前に犯した正確な間違いであり、プレビューが防ぐ正確な間違いです。

CI と展開スケジュール. ナイトリービルド、スケジュールされたテスト実行、および定期的なデプロイはすべて、github Actions、GitLab CI、および同様のシステムで cron 構文を使用します。式をここに構築し、確認してワークフローファイルに貼り付けます。これらのシステムは独自のサーバーで実行されるため、以下のタイムゾーンの注意事項に注意してください。

データパイプラインとレポート. 毎週月曜日の午前6 時の週報は、 0 6 * * 1;最初のロールアップは毎月です 0 0 1 * *;四半期ごとの仕事です 0 0 1 1,4,7,10 *。これらを生成して読み返すと、古典的な " が停止します。間違った日に実行されました "パイプラインインシデント。

キャッシュウォーミングとハートビート. 高頻度の仕事など */5 * * * * キャッシュを温めたり、健康診断をオンにしたりしてください。プレビューでは、手順を間違ったフィールドに配置したため、たとえば 1 時間に 1 回ではなく、間隔が期待どおりであることが確認されます。

学習 cron. まだ直感を構築しているのであれば、ジェネレーターは教育ツールです。式を入力し、文を読み、実行を確認すると、ドキュメントだけでは決して管理できない方法で構文と動作のマッピングが具体化されます。

タイムゾーンに関するメモ

次回実行のプレビューはUTCで時間を計算するので、結果は決定論的でこれを読んでいるすべての人にとって同じです。 real cron daemons, however, run in the server's local timezone unless configured otherwise, and CI providers each have their own convention - many default to UTC, some do not.したがって、式自体はタイムゾーンを運ばない; 決めるのはスケジューラーです。 so when you move an expression from this tool to the live system, confirm that system's timezone and offset the run times in your head accordingly. A 0 0 * * * ジョブは真夜中ですが、真夜中です どこ ジョブの実行場所に完全に依存します。 timezone オフセットについて推論する必要がある場合は、 タイムゾーン コンバーター 便利です タイムスタンプ コンバーター スケジューラが Unix タイムスタンプとして実行されると役立ちます。

式を生成する対解析する

このツールはフィールドから式を構築します。その兄弟、 cron 式パーサー、逆の方向に進みます: 既存の式を貼り付け、それがそれを説明し、その実行をプレビューします。 2 つは同じ問題の 2 つの方向をカバーします。 欲しいスケジュールがわかっていて構文が必要な場合はジェネレータを使用します; 式を継承し、その動作を理解する必要がある場合はパーサを使用します。どちらも、月の日または週の日のルールを含む同じ Vixie-cron セマンティクスを尊重するため、一方に読み取った説明は、もう一方に見られる動作と一致します。これらは一緒になって、私が説明しているより広範なキット内の小さな、焦点を絞ったペアです Web 開発者ツールキット 概要とより広い コーディング ツール ガイド

プライバシー: それはすべてブラウザで実行されます

ここにアップロードするものは何もなく、アップロードされるものは何もありません。式は完全にクライアント側のコードで構築、検証、説明、シミュレートされます。それは思っている以上に重要です。内部ジョブ スケジュールは、システムに関する事柄を明らかにすることができます' サードパーティに座ってほしくない s アーキテクチャとケイデンス' s ログ。ツールがインターネットから切断することで自己完結型であることを確認できます。これは、Toolz.dev 上のすべてのツールの背後にある同じクライアント側の原則であり、私はこれを完全に主張しています オンライン ツールのデータ プライバシー 記事.

フェイク

cron 式をどのように書くのですか?

標準の cron 式には、 minute, hour, day of month, month, day of week の 5 つのフィールドがスペースで区切られています。 各フィールドは、特定の値、リスト、範囲、ステップ、または * すべての に対して.例えば, 0 8 * * 1-5 月曜日から金曜日の08:00 を意味します このツールはあなたのために式を構築し、あなたが行くにつれてそれが何を意味するのかを示します。

5 つの cron フィールドはどういう意味ですか?

左から順に、分 (0 ~ 59) 、時間 (0 ~ 23) 、月 (1 ~ 31) 、月 (1 ~ 12) 、曜日 (0 ~ 6、0 と 7 はどちらも日曜日を意味する) です。 フィールド内の星は "every" value を意味します。 tool は各フィールドにラベルを付けるので、順序を覚えておく必要はありません。

何が */5 cronでという意味ですか?

スラッシュはステップ値を導入します。 minute フィールドでは、 */5 手段 " 毎 5 minutes" - 0, 5, 10, 15, など 範囲を持つステップを組み合わせることもできます: 0-30/10 分欄は分0、10、20、30 を意味します。 "every N units." を表すにはステップが標準的な方法です

なぜ私の仕事は、月日と曜日の設定で予想以上に頻繁に実行されるのはなぜですか?

これは最も一般的なcronサプライズです。 day-of-monthフィールドとday-of-weekフィールドの両方が制限されている場合 (どちらも制限されていません) *), 標準 cron は AND ではなく OR として扱います - どちらの条件も一致するとジョブは実行されます. ですから. 0 0 13 * 5 は13 日の金曜日だけでなく、毎月13 日と毎週金曜日に走る。 として1 フィールドを残す * 本当に OR 動作を望まない限り。

次の実行時間はどのタイムゾーンで表示されますか?

プレビューはUTCで今後の実行を計算するので、結果は誰にとっても同じです。 real cron daemonsはサーバータイムゾーン (またはTZ設定) を使用するので、サーバーが別のゾーンで実行されている場合は、それに応じて時間をオフセットします。 expression自体はタイムゾーンを運びません - それはスケジューラーが決定します。

数字の代わりに mon や jan などの名前を使用できますか?

はい。 month フィールドは受け入れます JAN スルー DEC そして曜日欄は承ります SUN スルー SAT、大文字と小文字を区別しません。 tool understands them when validating and describing your expression.数値はスケジューラー間で移植性が高いため、ジェネレーターは数値を放出しますが、名前付き入力は完全にサポートされます。

これは crontab の構文と同じですか?

はい、これは crontab、ほとんどの CI システム、および Kubernetes CronJobs で使用される標準的な 5 フィールドの Unix/Vixie cron を生成します。 sixth seconds フィールドや、のような非標準拡張を追加するスケジューラーもあります @reboot; これらは 5 フィールド標準の一部ではありません。スケジューリングのニーズの大部分において、このツールが生成する 5 フィールド式はまさにあなたが望むものです。

私のスケジュールはどこかに送信されますか?

いいえ 式はクライアント側のコードを使用してブラウザで完全にビルド、検証、記述、シミュレートされます アップロードまたは保存されるものは何もありません インターネットから切断することでこれを確認できます - ジェネレータはまだ機能します。


Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!