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 Deploy 上的 Deno Cron
在 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 上是如何工作的?
即使没有 Web 服务器处理请求,Deno Deploy 是如何确切地知道您的代码中存在 cron
的?
当创建项目的新生产部署时,会使用临时的 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 告知我们。