Deno (发音:"蒂诺")是 Ryan Dahl 在 2017 年创立的编程语言。作为 Node.js 的替代品, Deno 也是一个服务器运行时,但是支持多种语言,可以直接运行 JavaScript、TypeScript 和 WebAssembly 程序。本文探讨下如何基于 Deno 做定时任务。
背景: 倾城之链 ,基于 Vue 等开发的 SPA(单页应用);其 SEO 是基于 Prerender SPA Server ,其大致思路是:通过 Prerender & Redis & Nginx 为搜索引擎优化爬虫提供预渲染的 HTML。但每次重启服务器,需要为每个链接坐下「预热」,以便 Google 爬虫能快速获取到。因而需要坐下定时任务。一般采取 Node、Python 就很方便。为进一步熟悉下 Deno ,就采用了它。大致需要以下步骤即可:
服务器安装 Deno
参照 Github 安装说明,运行如下命令即可:
curl -fsSL https://deno.land/install.sh | sh
编写 ts 脚本
// auto-run.ts
import { exec } from "https://deno.land/x/exec/mod.ts";
import { cron } from 'https://deno.land/x/deno_cron/cron.ts';
const main = async () => {
const linksUrlArr = await getAllLinks()
for (let i = 0, len = linksUrlArr.length; i < len; i++) {
await sleep(500);
const link = linksUrlArr[i]
await exec(`curl -s ${link}\?_escaped_fragment_`)
}
}
cron('20 20 20 * * 3', () => {
main();
});
这其中,用到了 deno-exec 、 deno_cron 两个类库;前者与直接 Deno.run
没有大的区别;deno_cron
类似 Node.js 的 node-schedule
;它支持按天、星期、月份的不同周期来执行代码;上面表述为每周三晚 8:20:20运行。
持久化服务
pm2 ,是具有内置负载均衡器的 Node.js 应用程序的生产流程管理器。但用作其他程序服务,也是可以;具体步骤如下:
- 新建 bash 脚本(
start.sh
),按需填写内容:
#!/bin/bash
deno run --unstable --allow-net --allow-run curl-nicelinks.ts
- 赋予
start.sh
执行权限,并执行 pm2 命令,持久化服务:
chmod +x ./start.sh
pm2 start ./start.sh
遇到问题及解决
安装 Deno(1.27.0
) 在服务端运行,会报如下错误:
error: Uncaught NotFound: No such file or directory (os error 2)
Deno.run({
at opRun (deno: runtime/js/40_process.js:33:16)
网络检索 并没有得到答案;在本地却是能正常运行(版本:1.23.3
);故而采取了简单的解决方案,安装指定可运行的 Deno 版本即可:
curl -fsSL https://deno.land/install.sh | sh -s v1.23.3
Deno 如何安装特定版本(Install Specific Version)?,详情可参见 Github 项目:deno_install 。
2022 年 11 月 02 日写于〔深圳福田〕
您可能感兴趣的文章