cron是一个强大的工具,用于按照使用 cron 语法定义的计划运行作业(函数或命令)。
非常适合数据备份、通知等任务!
每当您的计划作业触发时执行一个函数
使用child_process
执行 javascript 进程外部的作业(如系统命令)
使用 Date 或 Luxon DateTime 对象而不是 cron 语法作为回调的触发器
使用额外的槽数秒(将其关闭将默认为 0 并匹配 Unix 行为)
npm 安装 cron
特征
安装
从 v2 迁移到 v3
基本用法
Cron 模式
Cron 语法概述
支持的范围
陷阱
应用程序编程接口
独立功能
CronJob 类
CronTime 类
社区
加入社区
贡献
一般贡献
提交错误/问题
致谢
执照
随着版本 3 中引入 TypeScript 并与 UNIX cron 模式保持一致,进行了一些更改:
月份索引:从0-11
更改为1-12
。因此,您需要将所有数字月份加 1。
星期索引:添加了对7
作为星期日的支持。
CronJob
的调整构造函数不再接受对象作为其第一个也是唯一的参数。请改用CronJob.from(argsObject)
。
回调现在按照注册的顺序调用。
nextDates(count?: number)
现在始终返回一个数组(如果未提供参数则为空)。使用nextDate()
代替单个日期。
删除了job()
方法,转而使用new CronJob(...args)
/ CronJob.from(argsObject)
删除了time()
方法,转而使用new CronTime()
import { CronJob } from 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('你每秒都会看到这条消息');}, // onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() 在这里是可选的,因为第四个参数设置为 true。
// 使用“from”静态方法的等效作业,以对象形式提供参数 const job = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('You will see this每秒消息');},start: true,timeZone: 'America/Los_Angeles'});
注意:在上面的第一个示例中,
CronJob()
的第四个参数自动启动作业。如果未提供或设置为 false,则必须使用job.start()
显式启动作业。
有关更高级的示例,请检查示例目录。
Cron 模式是这个库的支柱。熟悉语法:
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
详细的模式和解释可以在 crontab.org 上找到。链接中的示例有五个字段,最细粒度为 1 分钟,但我们的 cron 调度支持具有六个字段的增强格式,允许秒级精度。像 crontab.guru 这样的工具可以帮助构建模式,但请记住考虑秒字段。
以下是该库使用的 UNIX Cron 格式的快速参考,以及添加的第二个字段:
field allowed values ----- -------------- second 0-59 minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sunday, or use names)
名称也可用于“月份”和“星期几”字段。使用特定日期或月份的前三个字母(不区分大小写)。允许名称范围和列表。
示例:“周一、周三、周五”、“一月至三月”。
由于计算延迟,JS Date
和 Luxon DateTime
对象都不保证毫秒精度。该模块不包括标准 cron 语法的毫秒精度,但允许通过 JS Date
或 Luxon DateTime
对象指定执行日期。然而,由于这些计算延迟,指定精确的未来执行时间(例如在当前时间上添加毫秒)可能并不总是有效。据观察,小于 4-5 毫秒的延迟可能会导致不一致。虽然我们可以将所有日期粒度限制为秒,但我们选择允许更高的精度,但会建议用户潜在的问题。
使用onTick
的箭头函数将它们绑定到父级的this
上下文。因此,他们将无法访问 cronjob 的this
上下文。您可以在第 47 期(评论)中阅读更多内容。
sendAt
:指示CronTime
何时执行(返回 Luxon DateTime
对象)。
import * as cron from 'cron';const dt = cron.sendAt('0 0 * * *');console.log(`作业将运行于:${dt.toISO()}`);
timeout
:表示未来多少毫秒将执行CronTime
(返回一个数字)。
import * as cron from 'cron';const timeout = cron.timeout('0 0 * * *');console.log(`作业将在 ${timeout}ms 内运行`);
constructor(cronTime, onTick, onComplete, start, timeZone, context, runOnInit, utcOffset, unrefTimeout)
:
cronTime
:[必需] - 结束工作的时间。可以是 cron 语法、JS Date
对象或 Luxon DateTime
对象。
onTick
:[必需] - 在指定时间执行的函数。如果提供了onComplete
回调, onTick
将接收它作为参数。
onComplete
:[可选] - 当作业通过job.stop()
停止时调用。它也可能由onTick
运行后触发。
start
: [可选] - 确定作业是否应在构造函数退出之前开始。默认为false
。
timeZone
: [可选] - 设置执行时区。默认为当地时间。检查 Luxon 文档中的有效格式。
context
: [可选] - onTick 方法的执行上下文。
runOnInit
:[可选] - 初始化后立即触发onTick
函数。默认为false
。
utcOffset
: [可选] - 指定时区偏移量(以分钟为单位)。无法与timeZone
共存。
unrefTimeout
:[可选] - 用于控制事件循环行为。更多详细信息请参见此处。
from
(静态):创建一个新的 CronJob 对象,提供参数作为对象。请参阅上面的参数名称和描述。
start
:启动作业。
stop
:停止工作。
setTime
:修改CronJob
的时间。参数必须是CronTime
。
lastDate
:提供最后执行日期。
nextDate
:指示将激活onTick
的后续日期。
nextDates(count)
:提供即将启动onTick
的即将到来的日期数组。
fireOnTick
:允许修改onTick
调用行为。
addCallback
:允许添加onTick
回调。
constructor(time, zone, utcOffset)
:
time
: [必需] - 开始工作的时间。接受 cron 语法或 JS Date 对象。
zone
: [可选] - 相当于CronJob
参数中的timeZone
。
utcOffset
:[可选] - 类似于CronJob
参数中的utcOffset
。
加入Discord服务器!在这里,您可以在比 GitHub 更休闲的论坛中讨论问题并获得帮助。
该项目正在寻求帮助!如果您有兴趣帮助该项目,请查看我们的贡献文档。
请查看我们的贡献文档,它包含您在提交问题之前需要了解的所有信息。
这是一个社区努力项目。从最真实的意义上来说,这个项目最初是 cron.js 的一个开源项目,后来发展成为其他项目。其他人为该项目贡献了代码、时间和监督。在这一点上,有太多的人在这里无法一一列举,所以我们只能说声谢谢。
特别感谢 Hiroki Horiuchi、Lundarl Gholoi 和 koooge 在 DefineTyped 类型被导入 v2.4.0 之前所做的工作。
麻省理工学院