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");
});
本文将介绍
使用 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 控制面板中添加了一个**新的 Cron
标签页**,其中显示了项目中所有活跃的 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,使用相同的生产部署来执行任务。
在 Deno Deploy 上使用 Deno Cron,可以轻松创建 cron 任务并在几分钟内将其托管在云端,无需任何配置。
其他资源
下一步是什么?
构建可扩展业务需要能够可靠、轻松地调度任务。Deno Cron 是一种无需不必要配置即可调度任务的简单方法。
借助 Deno Cron、Deno KV、Deno Queues、npm 和 Web 标准 API,在 Deno 上构建和启动生产就绪的服务器变得更简单、更高效。但我们尚未止步。我们希望在运行时中添加更多云原语——敬请期待。
🚨️ 我们正在积极征求对 Deno Cron 的反馈 🚨️
如果您正在(或计划)在商业用途中使用它,并希望直接与我们的一位工程师联系以获取技术支持,请通过电子邮件或 Discord 告知我们。