🦁

cronって何

2023/03/21に公開

Cron とは

cron は、UNIX 系 OS で標準的に利用される常駐プログラム(デーモン)の一種で、利用者の設定したスケジュールに従って指定されたプログラムを定期的に自動実行する仕組みです。
例えば、毎日午前 5 時に特定のプログラムを自動実行させることができます。cron は Web アプリケーションなどで必要になることもあります。

デーモンとは

デーモンとは、UNIX 系 OS でメインメモリ上に常駐して特定の機能を提供するプログラムであり、利用者の操作とは無関係に処理を行うバックグラウンドプロセスの一種です。
デーモンは、別のプログラムや機器、通信相手など外部からの要求を受け付けて処理を実行したり、あらかじめ設定されたタイミングで自律的に特定の処理を実行したりすることができます。
また、ユーザが直接対話的に制御するプログラムもデーモンとして作ることができます。

Cron 式とは

cron 式は、時間ベースのスケジュール設定に使用される文字列で、繰り返しタスクの高度にカスタマイズ可能なスケジュール設定を提供します。
cron 式は、空白で区切られた 6 つ(または年を含む場合は 7 つ)のフィールドの文字列を使用して表現されます。
これらのフィールドには、分、時、日、月、曜日などが含まれます。各フィールドには数値やワイルドカード(_)、範囲指定(-)、リスト指定(,)などが使用できます。
例えば、「0 0 _ * *」という cron 式は、毎日午前 0 時 0 分に実行することを意味します。

cron 式の構文規則は以下の通りです。

*     *     *     *     *
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- 曜日 (0 - 6) (0: 日曜日)
|     |     |     +-------  (1 - 12)
|     |     +---------  (1 - 31)
|     +----------- 時間 (0 - 23)
+-------------  (0 - 59)

各フィールドには、数値やワイルドカード(_)、範囲指定(-)、リスト指定(,)などが使用できます。また、特殊な記号として、?や L などがあります。これらの記号を組み合わせることで、より複雑なスケジュールを作成することができます。
例えば、0 0 _ * は毎日午前 0 時に実行することを表し、/5 * * * *は 5 分ごとに実行することを表します。また、曜日フィールドには数字ではなく英語の省略形(例えば、SUN や MON)を使用することもできます。

以下は cron 式のサンプルです。
• 0 0 * * _:毎日午前 0 時に実行する
• 0 9 _ _ 1:毎週月曜日の午前 9 時に実行する
• _/5 * * * _:5 分ごとに実行する
• 0 _/2 * * _:2 時間ごとに実行する
• 0 0 1,15 _ 1:毎月 1 日と 15 日の午前 0 時に実行する
これらの例では、「分」「時」「日」「月」「曜日」などを指定しています。各フィールドで使用される記号や数字は cron 式の構文規則に従っています。

• _:ワイルドカード。全ての値を表します。
• _/n:n 分おきに実行することを表します。例えば、*/5 は 5 分ごとに実行することを表します。
• n-m:n から m までの範囲を指定します。例えば、1-5 は 1 から 5 までの値を指定します。
• n,m:複数の値を指定します。例えば、1,3,5 は 1、3、5 の値を指定します。
• ?:日または曜日フィールドに使用されます。どちらか一方だけに対して有効です。
• L:月または曜日フィールドに使用されます。月末日または週末(土曜日)を表す場合

Node を用いた Cron 式を実行するプログラム

以下は、Node.js で cron 式を実行するプログラムの例です。この例では、node-cron というライブラリを使用しています。

const cron = require("node-cron");

// 1分ごとに実行するジョブ
cron.schedule("* * * * *", () => {
  console.log("1分ごとに実行されるジョブ");
});

// 毎日午前5時に実行するジョブ
cron.schedule("0 5 * * *", () => {
  console.log("毎日午前5時に実行されるジョブ");
});

このプログラムでは、node-cron モジュールを使用して 2 つのジョブを定義しています。
1 つ目のジョブは、Cron 式* * * * _に基づいて 1 分ごとに実行されます。
2 つ目のジョブは、Cron 式 0 5 _ * *に基づいて毎日午前 5 時に実行されます。
各ジョブは、指定した Cron 式に従って自動的に定期的な処理を実行します。

GitHubで編集を提案

Discussion