前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在 Deno 中设置 CronJob

在 Deno 中设置 CronJob

作者头像
胡琦
发布2021-09-09 10:36:52
2.6K0
发布2021-09-09 10:36:52
举报
文章被收录于专栏:胡琦

❝群里的大佬已经在探讨"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/,简单的安装教程如下:

代码语言:javascript
复制
# 安装最新版
## 使用 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语法。

可通过以下方法引入:

代码语言:javascript
复制
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中定义自定义时间表,如:

代码语言:javascript
复制
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++的值:

代码语言:javascript
复制
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执行每分钟的任务:

代码语言:javascript
复制
import { everyMinute } from 'https://deno.land/x/deno_cron/cron.ts';

everyMinute(() => {
    console.log(new Date())
})

deno cron

此外还可以调用 start() 和 stop() 两个方法分别启动和停止所有的 cronjob:

代码语言:javascript
复制
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,您学废了吗?今天的分享就到这里,希望大家感兴趣的话可以看看源码,如果对您有启发欢迎评论区和我探讨,如有不足之处,欢迎批评指正!

https://github.com/rbrahul/deno_cron/blob/master/cron.ts

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 胡琦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 CronJob
  • 安装 Deno
  • deno_cron
  • 小结
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档