计划任务 CRON jobs

Strapi 允许您配置 cron 作业以在特定日期和时间执行,并带有可选的重复规则。

应在 ./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 作业并让它们在所需的时间运行:

  1. 创建 适当的文件。
  2. 启用 服务器配置文件中的 cron 作业。

或者,可以直接在 服务器配置文件cron.tasks 键中创建 cron 作业。

创建 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,
  },
})