在工作流中使用 Cron
在工作流文件中添加定时触发器:on: schedule: - cron: '30 5 * * 1-5'。表达式使用常见的五个字段(分钟、小时、日、月、星期),并且在 YAML 中必须加引号,因为 * 是特殊字符。你可以列出多个 cron 条目,github.event.schedule 会告诉任务是哪一个触发的。
UTC 与 5 分钟限制
调度始终按 UTC 计算,所以 0 9 * * * 是在 UTC 09:00 运行,而不是你的本地时间;可以借助工具中的本地时间列进行换算。GitHub 支持的最短间隔为 5 分钟。不支持 @daily 等宏,请写出完整字段。
延迟与不活跃的仓库
在高负载期间,尤其是整点时,定时运行可能会延迟启动;如果对时间要求不严格,可以选择 17 这样的非整点分钟。在公开仓库中,如果 60 天内没有任何仓库活动,定时工作流会被自动禁用。
测试定时工作流
在 schedule 旁边加上 workflow_dispatch,测试时就可以手动启动工作流。记住,定时任务只在默认分支上运行,所以在功能分支上修改 cron 在合并前不会生效。使用 concurrency 分组可以防止一次较慢的运行与下一次定时运行重叠。
常见问题
- GitHub Actions 的 Cron 使用什么时区?
- 始终是 UTC,且无法修改。编写表达式时请把本地时间换算成 UTC。
- 工作流可以每分钟运行一次吗?
- 不可以。最短间隔为 5 分钟,更频繁的调度最多每 5 分钟运行一次。
- 为什么我的定时工作流没有准时运行?
- 定时任务需要排队,负载高时可能延迟,并且只在默认分支上运行。不活跃公开仓库中的工作流也会被暂停。
- GitHub Actions 能用 @daily 吗?
- 不能。请使用等价的五个字段,例如 0 0 * * *。