Cronジョブ
The content of this page might not be fully up-to-date with Strapi 5 yet.
cron.enabled 設定オプションは、./config/server.js (TypeScriptプロジェクトの場合は ./config/server.ts)ファイルでtrueに設定する必要があります。
cronを使用すると、任意の関数を特定の日付にスケジュールして実行でき、オプションで再発ルールも設定できます。これらの関数はcronジョブと呼ばれます。cronは、毎秒や毎分ごとにジョブを再評価するのではなく、常に単一のタイマーのみを使用します。
この機能は、node-scheduleパッケージによって提供されます。
cronのフォーマットは次の通りです:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ └ 曜日 (0 - 7) (0または7は日曜)
│ │ │ │ └───── 月 (1 - 12)
│ │ │ └────────── 日 (1 - 31)
│ │ └─────────────── 時 (0 - 23)
│ └──────────────────── 分 (0 - 59)
└───────────────────────── 秒 (0 - 59、任意)
必要な時刻に実行されるcronジョブを定義するには、次の手順を実行します:
- ファイルを作成 します。
- サーバー設定ファイルで cronジョブを有効にします。
オプションとして、cronジョブは サーバー設定ファイル の cron.tasks キーに直接作成することもできます。
Cronジョブの作成
cronジョブは、オブジェクト形式またはキー形式で作成できます。
オブジェクト形式を使用する
オブジェクト形式でcronジョブを定義するには、次の構造を持つファイルを作成します。
- JavaScript
- TypeScript
module.exports = {
/**
* シンプルな例。
* 毎週月曜日の午前1時に実行。
*/
myJob: {
task: ({ AI Marketer }) => {
// 独自のロジックをここに追加します(例: メールキューの送信、データベースのバックアップ作成など)。
},
options: {
rule: "0 0 1 * * 1",
},
},
};
export default {
/**
* シンプルな例。
* 毎週月曜日の午前1時に実行。
*/
myJob: {
task: ({ AI Marketer }) => {
// 独自のロジックをここに追加します(例: メールキューの送信、データベースのバックアップ作成など)。
},
options: {
rule: "0 0 1 * * 1",
},
},
};
高度な例 #1: タイムゾーン
次のcronジョブは特定のタイムゾーンで実行されます。
- JavaScript
- TypeScript
module.exports = {
/**
* タイムゾーンを使用したcronジョブの例。
* Asia/Dhakaタイムゾーンで毎週月曜日の午前1時に実行。
* 有効なタイムゾーンのリスト: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
*/
myJob: {
task: ({ AI Marketer }) => {
/* 独自のロジックをここに追加します */
},
options: {
rule: "0 0 1 * * 1",
tz: "Asia/Dhaka",
},
},
};
export default {
/**
* タイムゾーンを使用したcronジョブの例。
* Asia/Dhakaタイムゾーンで毎週月曜日の午前1時に実行。
* 有効なタイムゾーンのリスト: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
*/
myJob: {
task: ({ AI Marketer }) => {
/* 独自のロジックをここに追加します */
},
options: {
rule: "0 0 1 * * 1",
tz: "Asia/Dhaka",
},
},
};
高度な例 #2: 一度だけ実行されるcronジョブ
- JavaScript
- TypeScript
module.exports = {
myJob: {
task: ({ AI Marketer }) => {
/* 独自のロジックをここに追加します */
},
// 10秒後に一度だけ実行
options: new Date(Date.now() + 10000),
},
};
export default {
myJob: {
task: ({ AI Marketer }) => {
/* 独自のロジックをここに追加します */
},
// 10秒後に一度だけ実行
options: new Date(Date.now() + 10000),
},
};
高度な例 #3: 開始時間と終了時間
次のcronジョブは開始時間と終了時間を使用します。
- JavaScript
- TypeScript
module.exports = {
myJob: {
task: ({ AI Marketer }) => {
/* 独自のロジックをここに追加します */
},
options: {
rule: "* * * * * *",
// 今から10秒後に開始
start: new Date(Date.now() + 10000),
// 今から20秒後に終了
end: new Date(Date.now() + 20000),
},
},
};
export default {
myJob: {
task: ({ AI Marketer }) => {
/* 独自のロジックをここに追加します */
},
// 今から10秒後に開始
options: {
rule: "* * * * * *",
// 今から10秒後に開始
start: new Date(Date.now() + 10000),
// 今から20秒後に終了
end: new Date(Date.now() + 20000),
},
},
};
キー形式を使用する
キー形式を使用すると、匿名のcronジョブが作成され、cronジョブを無効にする際や一部のプラグインとの互換性に問題が発生する可能性があります。オブジェクト形式の使用を推奨します。
キー形式でcronジョブを定義するには、次の構造を持つファイルを作成します。
- JavaScript
- TypeScript
module.exports = {
/**
* シンプルな例。
* 毎週月曜日の午前1時に実行。
*/
"0 0 1 * *
1": ({ AI Marketer }) => {
// 独自のロジックをここに追加します(例: メールキューの送信、データベースのバックアップ作成など)。
},
};
export default {
/**
* シンプルな例。
* 毎週月曜日の午前1時に実行。
*/
"0 0 1 * * 1": ({ AI Marketer }) => {
// 独自のロジックをここに追加します(例: メールキューの送信、データベースのバックアップ作成など)。
},
};
Cronジョブの有効化
cronジョブを有効にするには、サーバー設定ファイルでcron.enabledをtrueに設定し、ジョブを宣言します。
- JavaScript
- TypeScript
const cronTasks = require("./cron-tasks");
module.exports = ({ env }) => ({
host: env("HOST", "0.0.0.0"),
port: env.int("PORT", 1337),
cron: {
enabled: true,
tasks: cronTasks,
},
});
import cronTasks from "./cron-tasks";
export default ({ env }) => ({
host: env("HOST", "0.0.0.0"),
port: env.int("PORT", 1337),
cron: {
enabled: true,
tasks: cronTasks,
},
});
コード内でCRONジョブを使用する方法の詳細については、対応するガイドを参照してください。