Owen的博客

Owen的博客 -

在 Cloudflare Workers 部署一个带有 Dashboard 的 Cron 服务

昨天在 Cloudflare 搭建了 JSONBin 服务,作为持久化存储的方案,今天又总结出了我的工作流似乎还需要一个重要的 Trigger,那就是 Cron 任务,如果把这个问题解决,那么百分之 90 的用例就都被覆盖了。 目前已解决的工作流问题: Webhook Trigger: Deno Deploy 持久化存储: JSONBin 待解决的问题: Cron 任务 需要 Oauth2.0 授权的第三方接口调用,比如推特等 今天用部署在 Cloudflare Workers 之上的几百行代码的单一 Javascript 文件,满足了我的 Cron 任务需求。最终效果如下: 该工具的功能很简单,就是定时对配置里的 URL 或者 curl 命令发出请求,并且记录每个 URL 最近 10 条的日志,方便定位问题。 最终源码都在这一个文件里,可以很方便的部署在 Cloudflare Worker 之上。 HTML 文件也只有一个,增删改查都在一个页面进行。数据存储在一个 JSON 文件里,存储结构如下: { "tasks": { "1": { "url": "https://test.com", "interval": 5, "note":"Note", "logs": [ { "ok": true, "message": "success", "run_at": "2019-01-01 00:00:00" } ] } } } 用户(我)首先在这个简单的 UI 里增删改查 Task,然后利用 Cloudflare Workers 的 Schedule 事件,每分钟运行一次CheckAndRunTasks函数,该函数通过检查每个 Task 里logs字段里最近的run_at和任务本身的interval,来确定要不要运行该任务,随后计算出一个该次需要运行的 url/curl 命令列表,如果是 curl 命令,则解析为 fetch options, 然后Promise.allSettled并行发出请求,最后,记录各 URL 执行的情况。如果有失败,则还会调用 dashborad 里配置的通知 curl 命令,及时的发送错误消息。 有了这个之后,我就可以执行一些定时的任务了,比如我刚把定时发送Hacker News 中文精选的推特 Bot 的服务放在了 Deno Deploy 里,然后在这个 Cronbin 里添加一个每60分钟的定时请求: https://task.owenyoung.com/runHackernewszhTask?key=abc,这样就搞定了这个 bot 的定时发布程序。 目前还有一个痛点,就是发布推文这个 API,要是只有一个账户还好,但是我同时有很多个 Bot,所以最好是有一个 UI 界面可以绑定多账户,然后提供一个简单的发布 API 出来。我目前是用 IFTTT 做这件事,If Webhook -> Then Post a Tweet. 目前 IFTTT 免费层级只能绑定一个账户。所以我新开了一个坑SimpleAPI,准备用无服务器的方式提供任何接口的 SimpleAPI 版本,不知道能不能填上这个坑。 如果你想部署该服务,可以参考我写的这个文档

昨天在 Cloudflare 搭建了 JSONBin 服务,今天又总结出了需要 Cron 任务来解决百分之 90 的用例,于是用部署在 Cloudflare Workers 之上的单一 Javascript 文件,实现了定时对配置里的 URL 发出请求,并记录每个 URL 最近 10 条的日志,以便定位问题。为了解决 Oauth2.0 授权的第三方接口调用,准备用无服务器的方式提供任何接口的 SimpleAPI 版本。

Cloudflare Cron JSONBin SimpleAPI Workers

相关推荐 去reddit讨论

热榜 Top10

LigaAI
LigaAI
观测云
观测云
Dify.AI
Dify.AI
eolink
eolink

推荐或自荐