Gtihub Action|一行命令解决 LeanCloud 流控问题

本文最后更新于:2 years ago

昨天看到 小康用 Github Action 执行 python 脚本来完成定时任务,大赞,我咋没想到!突然想起来 阮一峰:GitHub Actions 教程:定时发送天气邮件,所以随便也写了个 Github Action。

👉 2021.1.18 更新内容:This scheduled workflow is disabled

👉 2021.12.19 更新内容:使用 crontab 命令替代 Github Aciton

1.遇到的问题

本博客没太多留言,所以也没访问评论后台。但是今天发现博客中出现一个留言,但是没有邮件提醒。上 LeanCloud 看日志,发现 “因流控原因,通过定时任务唤醒体验版实例失败,建议升级至标准版云引擎实例避免休眠”

这…是暗示我要打钱嘛?!看了看价格,2元一天,咳咳,下次一定!👋

LeanCloud 的休眠策略有两个:

  • 每天必须休眠 6 小时。
  • 30 分钟内没有外部请求

所以在 LeanCloud 的云引擎内,设定了一个唤醒的定时任务。但是由于官方流控,导致定时任务无法唤醒,容器就此长眠,自然没办法邮件提醒了。

2.思路

首先来想想,唤醒是什么?简单来说,就是访问服务器。

那好办,每隔半小时访问一下评论后台网站不就可以了。注意哦,是访问,不是登录,也不是写入数据。准确来说,就是 GET 请求 。那么一行命令就可以解决这个问题:curl https://xxxxxxxx

谁替我定时发送 GET 请求呢。(总不能手动输入网址访问😆)

答案就是 Github Action!教程如下,一共三步。

3.教程

本教程仅仅需要 8次点击,2 次输入。

3.1 第一步

fork 这个仓库:https://github.com/AimTao/leancloud-self-wake

3.2 第二步

设置你的 评论后台网站的地址,并开启 Github Action

这一步就是将你的 评论后台网站的地址 当作秘密存在这里。其中 Name 一定要是 SITE,因为 脚本里要用这个名字;Value 则为你的 评论后台网站的地址

点击你的仓库上方的 Actions 选项,如下图,点击 I understand... 的按钮,确认在 Fork 的仓库上启用 GitHub Actions 。

3.3 第三步

此处感谢 @qinxs 在评论中指出,Fork 的仓库上 GitHub Actions 的定时任务不会自动执行,必须要手动触发一次后才能正常工作。

所以 fork 之后,点击自己仓库右上角 starstar 你的仓库,这是为了触发 Github Action 第一次执行,之后就会自动执行定时任务。

设置完三步之后,在北京时间 7:00 - 23:59,每 29 分钟触发一次 Github Action,从而唤醒你的 评论后台网站。

可在 Aciton 中查看定时任务的执行记录:

4.其他方案的选择

4.1 方案一

本文方案就是受小康此文的启发,不过没有使用 python 脚本,直接利用 curl 命令。

小康在 优雅解决 LeanCloud 流控问题 一文中介绍的方法:利用 Github Action 定时执行一个 python 脚本,并返回执行结果用来提交 commit。

这个方案可以说非常奈斯了,Github Action 完成一个定时任务在适合不过啦!

稍微有一点点不中意的地方:

  • 配置太多参数。
  • 一段时间,提交太多 commit。小康一个月以来,已经有 300+ 个 commit 了。

4.2 方案二

利用阿里云的云监控,监控你的 评论后台网站,也就是每隔半小时给网站发送一个请求。

**缺点:**没办法设置监控时间段为 7:00 - 23:59。

5.延伸

总之,要么用监控,要么找地方执行脚本。这么说来,iphone 的快捷指令也可以很好地解决这个问题。

说到底还是任务自动化处理问题,大家对自动化的需求随处可见,毕竟懒人推动世界的发展。这也应该才是越来越多的人都学 python 的原因吧。

最后,

如果你不了解 Github Aciton,可以看 阮一峰:GitHub Actions 教程:定时发送天气邮件

如果你不了解 curl,可以看 阮一峰:curl 的用法指南

拜了拜!👋

6.更新

2021.1.18 更新内容:This scheduled workflow is disabled

好长时间都收不到消息提醒邮件,今天突然发现 action 被暂停了,出现了以下提示:

⚠️ This scheduled workflow is disabled because there hasn’t been activity in this repository for at least 60 days.

GitHub 发现这个仓库一直没有更新,所以禁用了我的 action。但是 GitHub 在这条提醒的旁边,还是提供了激活 action 的按钮,点击按钮就可以解决问题了。

我开始犹豫我的方式是不是有点滥用 GitHub 了,和那些把 GitHub 当成图床的人有什么区别hhh。

2021.12.19 更新内容:使用 crontab 命令替代 Github Aciton

Github Action 每次执行还要在 Docker 里安装 ubuntu,感觉挺浪费 Github 资源的,刚好前阵买了三年的服务器,想让服务器来做这件事。

Linux 系统启动时,init 进程会启动 cron 进程,corn 会执行定时任务表 crontab 中的定时任务。

只有一个命令:

  • crontab -e :即可编辑 crontab,编辑完保存后,出现 crontab: installing new crontab,cron 就会定时执行。
  • 格式如下:
    • */29 7-23 * * *:服务器时间 7:00 - 23:59,每 29 分钟触发一次。
    • curl https://your_site &> /dev/null:唤醒云引擎服务。
    • date "+%D %H:%M:%S" >> ~/wakeup.log:打印日期时间,记录执行的 log。
1
*/29 7-23 * * * curl https://your_site &> /dev/null && date "+\%D \%H:\%M:\%S" >> ~/wakeup.log

**更多:**如果使用 crontab 遇到问题,这篇文章可能会帮上你:crontab|Linux 的定时任务


Gtihub Action|一行命令解决 LeanCloud 流控问题
https://www.aimtao.net/slef-wake-leancloud/
Posted on
2020-06-26
Licensed under