首页  >  All Categories  >  Dev  >  在 Cloudflare Workers 部署一个带有 Dashboard 的 Cron 服务

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

昨天在 Cloudflare 搭建了 JSONBin 服务,作为持久化存储的方案,今天又总结出了我的工作流似乎还需要一个重要的 Trigger,那就是 Cron 任务,如果把这个问题解决,那么百分之 90 的用例就都被覆盖了。

目前已解决的工作流问题:

待解决的问题:

  • Cron 任务
  • 需要 Oauth2.0 授权的第三方接口调用,比如推特等

今天用部署在 Cloudflare Workers 之上的几百行代码的单一 Javascript 文件,满足了我的 Cron 任务需求。最终效果如下:

screenshot

该工具的功能很简单,就是定时对配置里的 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 版本,不知道能不能填上这个坑。

如果你想部署该服务,可以参考我写的这个文档

分类: Dev 
标签CronCloudflare
发布于:   📝 帮我完善这个页面?

该博客没有评论系统,我正在实验有意义的讨论是否更易在社群中发生,不知道为什么,人在社群中,似乎会有更好的行为规范。然后如果有高质量的讨论,我会手动再精选到原文。为此,我建立了一个 Telegram 讨论群组,你可以在里面讨论这篇文章,点此复制文章标题和链接