1. 为什么 GitHub Actions 的 Schedule 总是不准时?
我在使用 GitHub Actions 的 Schedule 功能时,发现一个让人头疼的问题:明明设置了 UTC 时间 08:00 执行任务,实际运行时间却变成了北京时间 17:00-17:20 不等。经过多次测试发现,这并非个例,而是 GitHub 官方文档中明确指出的设计特性。
GitHub 官方文档对 Schedule 事件的说明很直白:在高负载时段(比如每小时开始时),预定事件可能会出现延迟。这就好比早高峰时的地铁,虽然你计划 8:00 进站,但实际可能要排队到 8:10 才能通过闸机。GitHub 的 Schedule 机制也是如此,它只保证将任务加入执行队列,不保证准时运行。
更让人无奈的是,这种延迟没有上限。在我的实测中遇到过:
- 平均延迟 15-30 分钟
- 高峰时段延迟超过 1 小时
- 极端情况下任务直接被跳过
对于需要精确到分钟级的定时任务(比如准时发布文章、定时数据同步),这种不确定性简直是灾难。这就引出了我们的核心问题:如何绕过 GitHub 的 Schedule 限制,实现真正的精准定时?
2. workflow_dispatch:手动触发背后的自动化潜力
解决这个问题的钥匙藏在 GitHub Actions 的另一个触发器里——workflow_dispatch。这个设计初衷用于手动触发的功能,其实可以成为精准定时任务的突破口。
workflow_dispatch 的工作原理很简单:
- 在 yml 文件中声明触发器
on:
workflow_dispatch:
- 仓库的 Actions 页面会出现"Run workflow"按钮
- 点击按钮立即执行工作流
神奇之处在于,这个手动触发接口其实有对应的 API。这意味着我们可以用外部服务模拟"点击按钮"的操作。想象一下:如果有个永不迟到的闹钟,每天准时帮你按下这个按钮,从而绕过 Schedule 的限制。

