Cron 语法
node-cron 包使用标准的 cron 表达式格式来定义任务何时运行。它支持 五个或六个字段,其中 第一个字段(秒) 是可选的。
plaintext
# ┌────────────── 秒(可选)
# │ ┌──────────── 分钟
# │ │ ┌────────── 小时
# │ │ │ ┌──────── 日
# │ │ │ │ ┌────── 月
# │ │ │ │ │ ┌──── 星期
# │ │ │ │ │ │
# * * * * * *各字段允许的值
| 字段 | 值 |
|---|---|
| second | 0-59(可选) |
| minute | 0-59 |
| hour | 0-23 |
| day of month | 1-31 |
| month | 1-12(或名称,如 Jan、Sep) |
| day of week | 0-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('在一月和九月的星期日运行');
});解释:命名可以提高可读性,尤其是在处理特定月份或星期几时。