strapi系列-如何创建一个定时任务-Cron Jobs

2023-02-17,,,

Cron 是什么?

Cron 有多种用途。 Cron Jobs 用于安排服务器上的任务运行。它们最常用于自动化系统管理或维护。然而,它们也与 Web 应用程序的构建相关。 Web 应用程序可能需要在各种情况下定期执行特定操作。

为什么使用 Cron ?

定期进行的计划活动,Cron 允许将任意函数安排在特定日期执行,并具有可选的递归规则。Cron在任何给定时间只使用一个计时器,而不是每秒钟/分钟重新评估即将到来的作业。

怎么使用 Cron ?

我们先来了解一下Cron Jobs 结构


* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ 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)

规则

Seconds:可出现,- * / 四个字符,有效范围为0-59的整数

Minutes:可出现,- * / 四个字符,有效范围为0-59的整数

Hours:可出现,- * / 四个字符,有效范围为0-23的整数

DayofMonth:可出现,- * / ? L W C八个字符,有效范围为0-31的整数

Month:可出现,- * / 四个字符,有效范围为1-12的整数或JAN-DEc

DayofWeek:可出现,- * / ? L C #四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推

Year:可出现,- * / 四个字符,有效范围为1970-2099年

举例

0 0 2 1 * ? * 表示在每月的1日的凌晨2点调度任务

0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业

0 15 10 ? 6L 2002-2006 表示200-2006年的每个月的最后一个星期五上午10:15执行作业

由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置.

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时

0 0 12 ? * WED 表示每个星期三中午12点

"0 0 12 * * ?" 每天中午12点触发

"0 15 10 ? * *" 每天上午10:15触发

"0 15 10 * * ?" 每天上午10:15触发

"0 15 10 * * ? *" 每天上午10:15触发

"0 15 10 * * ? 2005" 2005年的每天上午10:15触发

"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发

"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发

"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发

"0 15 10 15 * ?" 每月15日上午10:15触发

"0 15 10 L * ?" 每月最后一日的上午10:15触发

"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

定义cron作业并让它们在要求的时间运行步骤

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

创建 cron job

在./config/cron-tasks.js定义任务,使用如下结构:

/**

        *    *    *    *    *    *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ 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) */ module.exports = { // 每周一 9am
'0 9 * * 1': () => {
console.log(1)
},
'0 58 1 ? * *': () => {
console.log(2)
},
'*/1 * * * *': () => {
console.log(3)
}
}

启用cron作业

要启用cron作业,请设置cron。在服务器配置文件config\server.ts中启用为true并声明作业

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,
},
});

运行成功~

大功告成~

今天就写到这里啦~小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
大家要天天开心哦

欢迎大家指出文章需要改正之处~

学无止境,合作共赢

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

strapi系列-如何创建一个定时任务-Cron Jobs的相关教程结束。

《strapi系列-如何创建一个定时任务-Cron Jobs.doc》

下载本文的Word格式文档,以方便收藏与打印。