egg提供了强大的定时任务系统。通过定时任务,可以系统修改服务的缓存数据,以便处理需要定时更新的数据。

在app/schedule目录下新建一个js文件,每一个js文件就是一个定时任务

8.1 定时任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// app/schedule
module.exports = {
schedule: {
interval: '1m', // 1 分钟间隔
type: 'all', // 指定所有的 worker 都需要执行
},
async task(ctx) {
i++
console.log(i)
},
};

/* 注释:
1ms -> 1毫秒
1s -> 1秒
1m -> 1分钟
*/

8.2 定点任务

定点任务(以每周一的5点30分0秒更新排行榜为例)


1、使用cron参数设定时间,cron参数分为6个部分,*表示所有都满足

1
2
3
4
5
6
7
8
9
*    *    *    *    *    *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ 星期 (0 - 7) (0或7都是星期日)
│ │ │ │ └───── 月份 (1 - 12)
│ │ │ └────────── 日期 (1 - 31)
│ │ └─────────────── 小时 (0 - 23)
│ └──────────────────── 分钟 (0 - 59)
└───────────────────────── 秒 (0 - 59, optional)
1
2
3
4
5
6
7
8
9
10
11
// app/schedule
module.exports = {
schedule: {
cron: '0 30 5 * * 1', //每周一的5点30分0秒更新
type: 'all', // 指定所有的 worker 都需要执行
},
async task(ctx) {
i++
console.log(i)
},
};

8.3 只执行一次定时任务

设置immediate参数为true时,该定时任务会在项目启动时,立即执行一次定时任务

1
2
3
4
5
6
7
8
9
10
11
module.exports = {
schedule: {
interval: '1m', // 1 分钟间隔
type: 'all', // 指定所有的 worker 都需要执行
immediate: true, //项目启动就执行一次定时任务
},
async task(ctx) {
i++
console.log(i)
},
};

8.4 关闭任务

配置disable参数为true时,该定时任务即关闭

8.5 指定定时任务执行环境env

1
env: ["dev", "debug"] //该定时任务在开发环境和debug模式下才执行