没有一个开发者想要将所有时长都用在了繁琐复杂每日任务上,例如服务器维护及管理、日常数据备份及其按时下载文件和电子邮箱。你更喜欢致力于注重实效工作,而非追踪这种令人讨厌的琐碎什么时候需要完成。【强烈推荐学习培训:《nodejs 教程》】
这个时候就需要用到线程同步,这将帮助你处理这种问题。
线程同步使您可以方案随意编码(方式/函数公式)和指令在固定日期时长、反复间距或特定间距后实行一次。在 Linux 电脑操作系统中,线程同步一般由例如 cron 什么的应用工具服务项目在电脑操作系统等级解决。
在 Node.js 应用软件中,类似 cron 的功效,我们可以使用 node-cron 这种包完成。如同开发人员所推荐的,node-cron 都是基于 GNU crontab 的 node.js 纯 JavaScript 里的小型每日任务调度器。
crontab 是 Linux 全面的计划任务执行机构。cron 的操作由 crontab 文档推动,该文件是一个环境变量,主要包含对 cron 守护程序的指令。node-cron
控制模块容许我们使用完整的 crontab 词法在 Node 中调度任务。
强烈推荐专用工具
crontab 在线编辑器:代码转换器能够数据可视化形成 crontab 的环境变量。
crontab 词法如下所示:
# ┌────────────── second (可选择)
# │ ┌──────────── min (minute,0 - 59)
# │ │ ┌────────── 钟头 (hour,0 - 23)
# │ │ │ ┌──────── 一个月里的什么时间 (day of month,1 - 31)
# │ │ │ │ ┌────── 月份 (month,1 - 12)
# │ │ │ │ │ ┌──── 礼拜中星期几 (day of week,0 - 6) 留意:周末为 0
# │ │ │ │ │ │
# │ │ │ │ │ │
# * * * * * *
许可的 cron 值包含以下几点。
字段名 | 值 |
---|---|
second | 0–59 |
minute | 0–59 |
hour | 0–23 |
day of the month | 1–31 |
month | 1–12(或月份缩写 Jan、Feb...) |
day of the week | 0–7(或 Jan、Feb...,0 或 7 是礼拜日) |
下面我们就来看看它一些使用方法和测试用例。
应用 node-cron
应用 npm
组装 node-cron
控制模块。
$ npm install --save node-cron
线程同步词法
cron.schedule(cronExpression: string, task: Function, options: Object)
选择项
scheduled
:一个布尔值(boolean
),用以设定建立的每日任务是否已经分配(初始值为true
)。timezone
:用以线程同步的时区时间。相关幅值,可参考 moment-timezone。
看看下面的事例。
const cron = require('node-cron')
cron.schedule('5 * * * * *', () => {
console.log('每分于第 5 秒运作一个任务')
})
时长规范化的部位 2、3、4、5 和 6 中的星号(*
)类似用以时长区分的文档 glob 或使用通配符;他们各自特定每分、一小时、每月的每一天、每月和每周的每一天。
下列编码将于每日零晨 5:30 运作。
const cron = require('node-cron')
cron.schedule('30 5 * * *', () => {
console.log('每日零晨 5:30 运作每日任务')
})
线程同步提醒与技巧
如今己经了解到了基础知识,使我们做一些更有意思的事。
假定您希望在每周五在下午 4 点运作一项特殊每日任务。编码如下所示:
const cron = require('node-cron')
cron.schedule('0 16 * * friday', () => {
console.log('每周五在下午 4:00 运作每日任务')
})
或是,您可能必须每个季度运作一次数据备份。crontab 词法并没有一个月的最后一天选择项,因而您可以使用下一个月的第一天,如下所示。
const cron = require('node-cron')
cron.schedule('2 3 1 1,4,7,10 *', () => {
console.log('在每季度的第一天运作每日任务')
})
下边标注的每日任务在早上 10:05 到晚上 6:05 中间一小时运作五分钟。
const cron = require('node-cron')
cron.schedule('5 10-18 * * *', () => {
console.log('在早上 10 点至在下午 6 点之间一小时运作五分钟任务')
})
在某些情况下,您可能必须每两个小时、三小时或四小时运作一次每日任务。您可以通过将时数除于所需的时间间距去完成此实际操作,比如,每四小时 *4
,或者在早上 12 点至在下午 12 点之间每三小时运作 0-12/3
。
min还可以用同样的方法区划。比如,minutes
区域的关系式为 */10
,表明每10min运作一次每日任务。
下边的每日任务在早上 8 点至在下午 5:58 中间每两个小时运作五分钟。
const cron = require('node-cron')
cron.schedule('*/5 8-18/2 * * *', () => {
console.log('在早上 8 点至在下午 5:58 中间每两个小时运作一次每日任务。')
})
计划任务方式
在结束前,使我们关注一下三个关键的计划任务方式。
开始任务
将 scheduled
选择项值设为 false
时,每日任务要被生产调度,但无法正常启动,即便 cron 关系式已经滴答作响。
要运行这种每日任务,你需要启用 start
方式。
const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {
console.log('在早上 8 点至在下午 5:58 中间每两个小时运作一次每日任务。')
})
task.start()
停止每日任务
必要时终止每日任务运作,可以用 stop
方式将 scheduled
选择项设为 false
。除非是重启,不然不容易实行该每日任务。
const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {
console.log('在早上 8 点至在下午 5:58 中间每两个小时运作一次每日任务。')
})
task.stop()
消毁每日任务
destroy
方式终止每日任务并把它彻底消毁。
const cron = require('node-cron')const task = cron.schedule('*/5 8-18/2 * * *', () => {
console.log('在早上 8 点至在下午 5:58 中间每两个小时运作一次每日任务。')
})
task.destroy()
以上便是 node-cron
的大多数作用,您应该使用这个作用来制定经常运转的每日任务。
大量程序编写基本知识,请访问:编程视频!!
以上就是关于Node.js中如何运用node-cron来调度任务?的具体内容,大量欢迎关注AdminJS其他类似文章!