跳到主要内容
Deno 2.4 发布,带来 deno bundle、字节/文本导入、OTel 稳定版等新特性
了解更多
A dinosaur with a clock around its neck.

Deno Cron 发布公告

构建 Web 应用程序变得越来越复杂。编写现代软件涉及利用云基础设施、剖析样板代码和管理复杂的配置——而开发者们只想专注于编写业务逻辑。

Deno 旨在通过消除配置和不必要的样板代码来彻底简化 Web 开发。我们已将无服务器数据库 Deno KV 和用于卸载任务或调度未来工作的 Deno Queues 内置到运行时中,因此将它们添加到您的应用程序只需几行代码。

今天,我们很高兴通过**引入 Deno Cron,一种创建计划任务的简便方法**,在简化 Web 开发方面迈出了又一步。

Deno.cron("Sample cron job", "*/10 * * * *", () => {
  console.log("This will run every 10 minutes");
});

本文将介绍

在上述 YouTube 视频中了解 Deno.cron() 的一些技巧和窍门。

使用 Deno Cron

Deno.cron()(在 1.38 版本中通过 --unstable 标志可用)是一个接受三个参数的函数

  • name,您的计划任务的名称
  • schedule,它使用 Unix cron 格式,时间为 UTC 时区
  • handler,一个根据所提供时间表执行的函数

与 UNIX/Linux 上的 cron 不同,**Deno Cron 的执行不会重叠**。这意味着如果您安排一个任务每 10 分钟运行一次,但该任务需要 30 分钟才能完成,Deno Cron 会自动跳过下一次计划运行,直到当前任务完成。重叠的 cron 任务可能导致意外问题,并需要额外繁琐的逻辑来避免,但 Deno Cron 完全规避了这一点。

我们还在努力支持一种方便 JavaScript 的 API 来指定 cron 调度

Deno Cron 在 Deno Deploy 上的应用

Deno Deploy,我们的多租户分布式无服务器 JavaScript 平台上,Deno.cron() 会被自动检测和管理,因此您无需担心任何事情。

**您可以无需 Web 服务器**,甚至无需持续的传入请求即可运行 cron 任务来保持您的 isolate 活跃。这是因为每当您的项目部署时,Deno Deploy 会自动检测您的 cron 任务并对其进行评估。当轮到您的 handler 运行时,Deno Deploy 会按需自动启动一个 isolate 来执行它们。

此代码可在 Deno Deploy 上运行。前往 Playground 查看

我们还在 Deno Deploy 控制面板中添加了一个**新的 Cron 标签页**,其中显示了项目中所有活跃的 cron 任务

The new Cron tab in your project settings will show your scheduled jobs detected by Deno Deploy.

您项目中的一个新 cron 标签页,显示您的活跃 cron 任务。

Your cron jobs will also appear in your logs.

您的 cron 任务将显示在日志中。

要修改或停止现有的 cron,请更改您的代码并创建新的部署。例如,如果您从代码中移除一个  Deno.cron 并部署,这些任务将不再被计划运行。

您的 Deno Cron 处理程序可以执行各种操作,例如更新 Deno KV 中的状态、ping 网站、发送电子邮件、启动数据库备份、定期调用 API 等。

它如何在 Deno Deploy 上运行?

Deno Deploy 如何准确地知道您的代码中存在 cron 定义,即使没有 Web 服务器处理请求?

当您的项目创建新的生产部署时,一个临时的 V8 isolate 将被用来评估您项目的顶层作用域,并发现任何 Deno.cron 定义。然后,全局 cron 调度器会根据您项目的最新 cron 定义进行更新,其中包括对现有 cron 的更新、新 cron 的添加以及已删除 cron 的移除。

全局 cron 调度器是一个可靠的服务,负责根据指定的调度安排和分派 cron 任务。在分派过程中,会按需启动一个 V8 isolate,使用相同的生产部署来执行任务。

这 24 行代码创建了一个 cron 任务,每小时从公共 API 获取天气数据并将其添加到 Deno KV。Web 服务器端点会打印出所有时间戳和天气数据。

在 Deno Deploy 上使用 Deno Cron,可以轻松创建 cron 任务并在几分钟内将其托管在云端,无需任何配置。

其他资源

下一步是什么?

构建可扩展业务需要能够可靠、轻松地调度任务。Deno Cron 是一种无需不必要配置即可调度任务的简单方法。

借助 Deno Cron、Deno KVDeno QueuesnpmWeb 标准 API,在 Deno 上构建和启动生产就绪的服务器变得更简单、更高效。但我们尚未止步。我们希望在运行时中添加更多云原语——敬请期待。

加入 Hacker News 上的讨论。

🚨️ 我们正在积极征求对 Deno Cron 的反馈 🚨️

如果您正在(或计划)在商业用途中使用它,并希望直接与我们的一位工程师联系以获取技术支持,请通过电子邮件Discord 告知我们。