近期,我们项目组的小程序成功上线,为了方便社群运营,将小程序链接集成至企业微信群的欢迎语中。小程序链接由后端接口动态生成,且设置了最长30天的有效期限制。为简化链接获取流程,我专门编写了一段 Deno 脚本,实现链接自动获取并通过飞书机器人同步至群聊。鉴于 Deno 运行时对定时任务的内置支持,此次我选择直接采用 Deno Cron 进行任务调度,而非传统的 crontab 管理方式。
Deno Cron 简介
Deno 是一个现代的 JavaScript 和 TypeScript 运行时,它内置了对 cron 表达式的支持,使得定时任务的编写和管理变得非常简单。Deno 的 Deno.cron
函数允许你定义定时任务,并指定执行的时间间隔。
与 Crontab 的对比
传统的 crontab 是 Unix/Linux 系统中用于定时执行任务的工具。与 Deno cron 相比,crontab 更加底层,需要手动管理任务的执行时间和脚本路径。而 Deno cron 提供了更高层次的抽象,使得任务的定义和执行更加直观和便捷。
使用 Docker 运行 Deno Cron
作为一个长期运行的后台进程,我使用了Docker容器作为定时任务的运行时。以下是一个示例命令,展示了如何使用 Docker 运行 Deno cron 任务:
1 | docker run -v $(pwd):/app -w /app --name deno-schedule -d denoland/deno deno run -A --unstable-cron task.ts |
这个命令做了以下几件事:
- 使用
denoland/deno
镜像。 - 将当前目录挂载到 Docker 容器的
/app
目录。 - 设置工作目录为
/app
。 - 后台运行容器,并命名为
deno-schedule
。 - 运行
task.ts
文件,并启用 unstable cron 功能。
示例代码解析
下面是一个简单的 Deno 定时任务示例,它每周一上午 11 点生成一个小程序链接并报告到飞书:
1 | async function getAccessToken() { |
在这个示例中,我们定义了一个每周一上午 11 点执行的任务,它会生成一个小程序链接并通过飞书报告。
总结
总的来说,Deno 在服务端领域表现出色,其内置的 cron 支持让定时任务管理变得简单高效,相比传统 crontab 更直观便捷。示例代码清晰展示了其强大的功能和易用性,极大地简化了开发流程,提升了系统的稳定性和可维护性。