在前端开发中,我们经常需要按照一定的时间规律执行一些任务,比如定时发送邮件、定时更新数据等等,这时候我们可以使用 egg-schedule-custom 这个 npm 包来帮助我们实现。
什么是 egg-schedule-custom
egg-schedule-custom 是阿里的 egg.js 框架中一个非常常用的定时任务调度器。它通过一定的配置来实现定时执行某些任务,使得我们的程序变得更加智能化。
安装
我们可以通过 npm 安装 egg-schedule-custom 包。在项目目录下,执行以下命令即可:
$ npm install egg-schedule-custom --save
使用
使用 egg-schedule-custom 可以分为两步:
- 编写定时任务
- 配置定时任务的执行时间
编写定时任务
在 egg.js 项目的 app/schedule 目录中编写定时任务脚本,如下所示:
-- -------------------- ---- ------- -- ---------- - ------ ----- ------------ - ---------------------------- ----- --------- ------- ------------ - ------ --- ---------- - ------ - -- -- ------- ---- ----- -- - - - - --- -- - ----- ----------- - ------------------------ -- ----- ------ - - -------------- - ----------
我们可以通过在定义的方法里面实现我们的业务逻辑,例如更新数据库、发送邮件等等,这里只是打印了一句话,是一个示例。
值得注意的是,我们在文件中继承了 egg.js 提供的 Subscription 类,重写了 subscribe 方法,这个函数会在定时任务触发的时候被执行。
配置定时任务的执行时间
在 Egg.js 项目的 config 目录中,创建 config.schedule.js 文件,并进行如下配置:
exports.schedule = { enable: true, cronStart: process.env.CRON_START || '0 0 0 * * *', // 默认每天 0 点执行 };
这里有两个主要的配置项:
- enable:指定是否开启定时任务,默认为开启;
- cronStart:指定定时任务的启动时间,默认为每天 0 点。
定时任务配置类似于 Linux 系统的 cron 脚本,我们可以自定义时间格式来指定定时任务触发的时间点。cron 表达式的格式为:
# ┌───────────── 分钟 (0 - 59) # │ ┌───────────── 小时 (0 - 23) # │ │ ┌───────────── 日 (1 - 31) # │ │ │ ┌───────────── 月 (1 - 12) # │ │ │ │ ┌───────────── 星期 (0 - 6) (星期天为 0) # │ │ │ │ │ # │ │ │ │ │ # * * * * * command
其中,星号(*)表示所有可能的值,可以在相应的时间字段中指定多个时间,使用逗号分隔,例如 0,30 * * * *
表示每小时的 0 分钟和 30 分钟执行一次任务。
除了星号,还有一些特殊的字符:
/
:指定间隔时间,例如*/5 * * * *
表示每 5 分钟执行一次任务;-
:指定时间范围,例如0 9-18 * * *
表示每天上午 9 点到下午 6 点之间每个整点执行一次任务。
除了上面介绍的这些特殊字符以外,还有一些命令行命令可以在终端上查找到。
运行
如果我们按照上面的步骤编写好了定时任务脚本并配置好了执行时间,那么我们就可以在 Egg.js 项目根目录下运行以下命令来启动定时任务了:
$ npm run dev
在控制台中输出的信息中,我们可以看到类似于下面这样的内容,表示每日任务已经开始执行:
app/schedule/daily_task.js 开始执行每日任务
总结
通过使用 egg-schedule-custom 包,我们可以非常方便地实现定时任务,并将任务执行时间精细地控制在我们自己设定的范围内。这样的实现方式,使得开发人员可以更加高效地完成定时任务,同时也增加了程序的智能化程度。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600671cd30d0927023822900