首页/开发/CI/CD 与发布速查/GitHub Actions 定时工作流
工具链要点63 条

GitHub Actions 定时工作流

on.schedule 用 cron 定时触发:时间为 UTC;仓库长期无活动时定时工作流会被自动停用,需要留意。

CI/CD 与发布速查开发更新于 2026-10-13

定时工作流是什么

GitHub Actions 用 on.schedule 加 cron 语法为工作流设定时触发:时间一律按 UTC 计算,高峰期可能延迟执行。仓库长时间无活动时定时工作流会被自动停用,需要手动重新启用,因此定时任务要配手动兜底入口和失败通知,别指望它永远安静地跑。

基本信息

语法cron: '0 18 * * *'(UTC 时区)
时区一律 UTC,换算本地时间要手动加偏移
延迟高峰期可能延迟数分钟到更久
停用仓库长期无活动后自动停用
兜底保留 workflow_dispatch 手动补跑
通知失败任务要有结果通知渠道
分散多个定时任务错开分钟数,减少同时排队

定时加手动触发

定时加手动触发
name: nightly-sync
on:
  schedule:
    - cron: '0 18 * * *'  # 每天 UTC 18:00,即北京时间 02:00
  workflow_dispatch:  # 手动补跑入口
jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./scripts/sync.sh  # 实际任务脚本

典型使用场景

  • 夜间巡检:依赖更新检查、安全扫描、数据同步
  • 报表生成:每日或每周定时产出并提交到仓库或制品
  • 缓存预热:业务高峰前定时预热缓存或派生数据
  • 合规任务:定期导出审计数据、检查凭据轮换
  • 补跑:定时漏跑后用手动触发补齐
  • 清理任务:定时清理过期产物与临时分支
  • 预览环境回收:定时销毁超期的分支预览站点

常见现象与对策

现象原因对策
没按本地时间跑cron 按 UTC手动换算或两套表达式对照
任务延迟高峰期排队任务做成幂等,不依赖精确时点
突然不执行长期无活动被停用定期检查并重新启用
失败无感知没有通知失败时发通知到团队渠道
无法手动补跑没配手动触发保留 workflow_dispatch
时区换算写错固定偏移换算出错注释标注两地时间
关键定时任务做成幂等:延迟或补跑时不会产生重复副作用。
忽略自动停用:夜间任务长期未执行无人察觉,定时任务要有健康检查。
cron 最小间隔为 5 分钟,别写更密的表达式。
多个仓库的定时任务错开分钟数:同时整点触发会排队,分散到不同分钟更稳。

易错点

  • 按本地时间理解 UTC cron:整体排期偏移。
  • 忽略自动停用:任务长期停跑无人察觉。
  • 任务不幂等:补跑产生重复数据。
  • 没有失败通知:故障静默累积,巡检变成摆设。

数据来源与参考

  • GitHub Docs《Events that trigger workflows》(schedule)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌