在 Deno 中设置 CronJob
❝群里的大佬已经在探讨"Deno 是一个迈向错误方向的 JavaScript 运行时"了,而我,多年经验的Copy攻城狮,依旧只能看懂些边边角角的知识点,然后分享出来还被大佬批得体无完肤。无奈,以目前Copy攻城狮对JavaScript的掌握程度,也只配 API 调用师的水准。有的人一出生就是王者;有的人从青铜一步一步"迈向CEO赢取白富美走向人生巅峰";有的人同样是青铜,十年以后还是青铜,“慢进则退”,一步一步沦落到“癫疯人生”。废话太多,还是先看看 Deno 中的 CronJob 如何写"Hello World".
❞
什么是 CronJob
CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。比如小明每天晚上都会问候她异地的女朋友并送温暖,比如“铝盆友彩虹屁 bot”遇上 Deno定时发送邮件就依赖于 Serverless平台提供的周期触发函数功能,再比如在一些服务编排脚本中时常能看到诸如schedule: "*/1 * * * *"
,也许这就是 CronJob。本质上CronJob是一个调度程序,使应用程序可以调度作业在特定日期或时间自动运行。今天,我们将把CronJob集成到Deno应用程序中,有兴趣看看吗?
安装 Deno
前面的文章中基本都没有提及 Deno 的安装,在国内,我们使用 "vscode-deno 之父“JJC大佬为我们提供的镜像服务进行安装,地址为https://x.deno.js.cn/
,简单的安装教程如下:
# 安装最新版
## 使用 Shell:
curl -fsSL https://x.deno.js.cn/install.sh | sh
## 使用 PowerShell:
iwr https://x.deno.js.cn/install.ps1 -useb | iex
# 安装某个特定版本
## 使用 Shell:
curl -fsSL https://x.deno.js.cn/install.sh | sh -s v1.0.0
## 使用 PowerShell:
$v="1.0.0"; iwr https://x.deno.js.cn/install.ps1 -useb | iex
# 验证安装
deno --help
deno_cron
目前deno官方第三方插件库中关于cron的库有3条,其中deno_cron目前 35星。deno_cron 是一个在Deno中使用的智能cron作业调度程序库,它使您可以编写具有大量灵活性的可读cron语法。对于许多开发人员而言,编写cron语法和操作可能非常繁琐。这个插件提供了非常友好的开发人员api,可以编写所需的任何作业计划程序的cron语法。
可通过以下方法引入:
import {cron, daily, monthly, biweekly, weekly, hourly, every15Minute, everyMinute, start, stop } from 'https://deno.land/x/deno_cron/cron.ts';
细心的朋友可能直接去读源码了,核心包括大量空行大概168行,这不禁让我们想起了npm包is-promise,这个只有两行代码的包的周下载量接近千万次,但愿同样的事情不会再复现!
我们可以使用 cron 在Deno中定义自定义时间表,如:
cron('* * * * * *', () => {
// run some task
});
# 其中
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ 星期 (0 - 7) (0 或者 7 is 星期日)
│ │ │ │ └───── 月 (1 - 12)
│ │ │ └────────── 日 (1 - 31)
│ │ └─────────────── 时 (0 - 23)
│ └──────────────────── 分 (0 - 59)
└───────────────────────── 秒 (0 - 59) - [可选 默认 01]
这些星号是用来做什么的呢?
-
第一个星号占用秒数。取值范围为0-59 -
第二个星号使用分钟数,并且取值范围为0-59 -
第三个星号使用小时数,其值介于0-23之间 -
第四个星号为月份中的一天,其值在1-31之间 -
第五个星号为一年中的月份,其值在1-12之间 -
第六个星号是星期几,取值范围是0-7
例如每隔一秒打印信息和i++的值:
import { cron } from 'https://deno.land/x/deno_cron/cron.ts';
let i = 0;
cron('*/1 * * * * *', () => {
// run some task
console.log('This is a same thing', i++)
});
deno cron
当然,除了设置 * , 我们还可以调用其他api,如使用everyMinute
执行每分钟的任务:
import { everyMinute } from 'https://deno.land/x/deno_cron/cron.ts';
everyMinute(() => {
console.log(new Date())
})
deno cron
此外还可以调用 start() 和 stop() 两个方法分别启动和停止所有的 cronjob:
import { cron, start,stop } from 'https://deno.land/x/deno_cron/cron.ts';
let i = 0;
cron('*/1 * * * * *', () => {
// run some task
console.log('This is a same thing', i++)
if (i != 5) {
start()
} else {
console.log('Stop!')
stop()
}
});
deno cron
小结
在 deno 中使用 cron,您学废了吗?今天的分享就到这里,希望大家感兴趣的话可以看看源码,如果对您有启发欢迎评论区和我探讨,如有不足之处,欢迎批评指正!
- 点赞
- 收藏
- 关注作者
评论(0)