应在 ./config/server.js
(或 TypeScript 项目的 ./config/server.ts
)文件 中将 cron.enabled
配置选项设置为 true
。
cron
允许安排任意函数在特定日期执行,并带有可选的重复规则。这些函数称为 cron 作业。cron
在任何给定时间仅使用单个计时器,而不是每秒/分钟重新评估即将到来的作业。
此功能由 node-schedule
包提供支持。
cron
格式包括:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
要定义 cron 作业并让它们在所需的时间运行:
或者,可以直接在 服务器配置文件 的 cron.tasks
键中创建 cron 作业。
创建 cron 作业
使用对象格式
要使用对象格式定义 cron 作业,请创建具有以下结构的文件:
js
./config/cron-tasks.js
js
module.exports = {
/**
* 简单的例子。每周一凌晨 1 点。
*/
myJob: {
task: ({ strapi }) => {
// 在此添加您自己的逻辑(例如发送电子邮件队列、创建数据库备份等)。
},
options: {
rule: '0 0 1 * * 1',
},
},
}
高级示例 #1:时区
以下 cron 作业在特定时区运行:
js
./config/cron-tasks.js
js
module.exports = {
/**
* 带时区的 Cron 作业示例。
* 每周一凌晨 1 点(亚洲/达卡时区)。
* List of valid timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
*/
myJob: {
task: ({ strapi }) => {
/* Add your own logic here */
},
options: {
rule: '0 0 1 * * 1',
tz: 'Asia/Dhaka',
},
},
}
高级示例 #2:一次性 cron 作业
以下 cron 作业在给定时间仅运行一次:
js
./config/cron-tasks.js
js
module.exports = {
myJob: {
task: ({ strapi }) => {
/* Add your own logic here */
},
// only run once after 10 seconds
options: new Date(Date.now() + 10000),
},
}
高级示例#3:开始和结束时间
以下 cron 作业使用开始和结束时间:
js
./config/cron-tasks.js
js
module.exports = {
myJob: {
task: ({ strapi }) => {
/* Add your own logic here */
},
options: {
rule: '* * * * * *',
// start 10 seconds from now
start: new Date(Date.now() + 10000),
// end 20 seconds from now
end: new Date(Date.now() + 20000),
},
},
}
使用键值格式
使用密钥格式会创建一个匿名 cron 作业,这可能会在尝试禁用 cron 作业或使用某些插件时导致问题。建议使用对象格式。
要使用密钥格式定义 cron 作业,请创建一个具有以下结构的文件:
js
./config/cron-tasks.js
js
module.exports = {
/**
* 简单的例子。每周一凌晨 1 点。
*/
'0 0 1 * * 1': ({ strapi }) => {
// 在此处添加您自己的逻辑(例如发送电子邮件队列、创建数据库备份等)。
},
}
启用 cron 作业
要启用 cron 作业,请在 服务器配置文件 中将 cron.enabled
设置为 true
,并声明作业:
js
./config/server.js
js
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,
},
})