Skip to content

Cron 语法

node-cron 包使用标准的 cron 表达式格式来定义任务何时运行。它支持 五个或六个字段,其中 第一个字段(秒) 是可选的。

plaintext
# ┌────────────── 秒(可选)
# │ ┌──────────── 分钟
# │ │ ┌────────── 小时
# │ │ │ ┌──────── 日
# │ │ │ │ ┌────── 月
# │ │ │ │ │ ┌──── 星期
# │ │ │ │ │ │
# * * * * * *

各字段允许的值

字段
second0-59(可选)
minute0-59
hour0-23
day of month1-31
month1-12(或名称,如 Jan、Sep)
day of week0-7(或名称,0 或 7 表示星期日)

使用示例

1. 使用多个值

你可以使用逗号定义多个特定值。这样可以让任务在一个字段中的多个时间点运行。

javascript
import cron from 'node-cron';

// 每小时的第 1、2、4、5 分钟执行
cron.schedule('1,2,4,5 * * * *', () => {
  console.log('在每小时的第 1、2、4、5 分钟运行');
});

说明:第一个字段(minute)被设为 1,2,4,5,表示任务会在每小时的第 1、2、4、5 分钟各执行一次。
注意:该表达式只有 5 个字段,因此 second 字段被省略。在 node-cron 中,如果未提供秒字段,则默认值为 0

2. 使用范围

你可以用连字符(-)定义一个范围,以指定连续的区间。

javascript
import cron from 'node-cron';

// 每小时的第 1 分钟到第 5 分钟(含)之间每分钟运行一次
cron.schedule('1-5 * * * *', () => {
  console.log('Running every minute from 1 to 5');
});e.log('running every minute to 1 from 5');

说明:这等价于写成 1,2,3,4,5,是一种更简洁地表示连续值的方式。

3. 使用步长值

步长通过在范围或通配符后使用斜杠(/)来定义,从而允许你设定周期性间隔。

javascript
// 每 2 分钟运行一次(偶数分钟:0, 2, 4, …)
cron.schedule('*/2 * * * *', () => {
  console.log('每 2 分钟运行一次(偶数分钟)');
});

// 每奇数分钟运行一次(1, 3, 5, …, 59)
cron.schedule('1-59/2 * * * *', () => {
  console.log('从第 1 分钟开始,每 2 分钟运行一次(奇数分钟)');
});

说明:

  • */2 表示“每 2 个单位”,遵循可用的取值范围,例如分钟 0-59。在此场景下,它表示“从 0 到 59,每 2 分钟触发一次”,覆盖所有偶数分钟。

  • 1-59/2 表示“从 1 开始,每 2 个单位触发一次”,覆盖所有奇数分钟。

4. 使用月份和星期名称

为了更高的可读性,node-cron 允许你使用月份和星期的名称(全称或缩写)来代替数字。

js
// 每年一月和九月的每个星期日,每分钟运行一次
cron.schedule('* * * January,September Sunday', () => {
  console.log('在一月和九月的星期日运行');
});

// 使用缩写名称的相同计划
cron.schedule('* * * Jan,Sep Sun', () => {
  console.log('在一月和九月的星期日运行');
});

解释:命名可以提高可读性,尤其是在处理特定月份或星期几时。

2016 年以 ISC 许可证发布。