AWS EventBridge cron 转 GitHub Actions
AWS EventBridge 的字段是 cron(分 时 日 月 星期 年);GitHub Actions 的字段是 分 时 日 月 星期。粘贴表达式即可转换,不能精确对应的部分会标出原因和替代写法。
目标 · GitHub Actions无法转换
日: GitHub Actions 没有“每月最后一天”。月底可能是 28 到 31 号,没有一个固定日期能匹配。
替代写法在 28-31 号运行,只有明天是 1 号时才继续。需要 GNU date;crontab 里的 % 要写成 \%。
单独使用并不等价:需要在任务里加一行判断。0 0 28-31 * * # job: [ "$(date -d tomorrow +%d)" = "01" ] || exit 0
其他平台上的相同调度
crontab无法转换
日: crontab 没有“每月最后一天”。月底可能是 28 到 31 号,没有一个固定日期能匹配。
替代写法在 28-31 号运行,只有明天是 1 号时才继续。需要 GNU date;crontab 里的 % 要写成 \%。
单独使用并不等价:需要在任务里加一行判断。0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && /path/to/job
Kubernetes无法转换
日: Kubernetes 没有“每月最后一天”。月底可能是 28 到 31 号,没有一个固定日期能匹配。
替代写法在 28-31 号运行,只有明天是 1 号时才继续。需要 GNU date;crontab 里的 % 要写成 \%。
单独使用并不等价:需要在任务里加一行判断。0 0 28-31 * * # job: [ "$(date -d tomorrow +%d)" = "01" ] || exit 0
Spring等价
0 0 0 L * *Quartz等价
0 0 0 L * ?接下来 10 次运行
在你的浏览器中计算- 计算中…
AWS EventBridge 与 GitHub Actions 的区别
| AWS EventBridge | GitHub Actions | |
|---|---|---|
| 字段 | cron(分 时 日 月 星期 年) | 分 时 日 月 星期 |
| 周日 | 1(SUN=1 … SAT=7) | 0 |
| 日和星期都设置时 | 其中一个必须是 ? | 任一满足 |
| 特殊字符 | L W #(仅一个 #) | 无 |
| 简写 | 无;间隔用 rate() | 无 |
| 时区 | Scheduler 可设 IANA 时区,默认 UTC | UTC,或每条加 timezone: |
| 最短间隔 | 1 分钟 | 5 分钟,尽力而为 |
常用调度转换结果
| AWS EventBridge | GitHub Actions | |
|---|---|---|
| 每 5 分钟 | cron(0/5 * * * ? *) | */5 * * * * |
| 每小时 | cron(0 * * * ? *) | 0 * * * * |
| 每分钟 | cron(* * * * ? *) | 无法转换 |
| 每 10 分钟 | cron(0/10 * * * ? *) | */10 * * * * |
| 每 15 分钟 | cron(0/15 * * * ? *) | */15 * * * * |
| 每 30 分钟 | cron(0/30 * * * ? *) | */30 * * * * |
| 每天零点 | cron(0 0 * * ? *) | 0 0 * * * |
| 每天早上 9 点 | cron(0 9 * * ? *) | 0 9 * * * |
| 工作日早上 9 点 | cron(0 9 ? * 2-6 *) | 0 9 * * 1-5 |
| 每周一 | cron(0 0 ? * 2 *) | 0 0 * * 1 |
| 每月 1 号 | cron(0 0 1 * ? *) | 0 0 1 * * |
| 每 6 小时 | cron(0 0/6 * * ? *) | 0 */6 * * * |
| 每周日零点 | cron(0 0 ? * 1 *) | 0 0 * * 0 |
| 每 2 小时 | cron(0 0/2 * * ? *) | 0 */2 * * * |
| 每 12 小时 | cron(0 0/12 * * ? *) | 0 */12 * * * |
| 每天中午 12 点 | cron(0 12 * * ? *) | 0 12 * * * |
| 每周五 | cron(0 0 ? * 6 *) | 0 0 * * 5 |
| 每月最后一天 | cron(0 0 L * ? *) | 无法转换 |
| 每季度 | cron(0 0 1 1/3 ? *) | 0 0 1 */3 * |
| 每 2 分钟 | cron(0/2 * * * ? *) | 无法转换 |
| 每 3 小时 | cron(0 0/3 * * ? *) | 0 */3 * * * |
| 每天早上 6 点 | cron(0 6 * * ? *) | 0 6 * * * |
| 每天晚上 6 点 | cron(0 18 * * ? *) | 0 18 * * * |
| 每天两次 | cron(0 0/12 * * ? *) | 0 */12 * * * |
| 工作日晚上 6 点 | cron(0 18 ? * 2-6 *) | 0 18 * * 1-5 |
| 周末上午 10 点 | cron(0 10 ? * 1,7 *) | 0 10 * * 0,6 |
| 每月 15 号 | cron(0 0 15 * ? *) | 0 0 15 * * |
| 每月第一个周一 | cron(0 9 ? * 2#1 *) | 无法转换 |
| 每月最后一个周五 | cron(0 17 ? * 6L *) | 无法转换 |
| 每年一次 | cron(0 0 1 1 ? *) | 0 0 1 1 * |
| 每 3 分钟 | cron(0/3 * * * ? *) | 无法转换 |
| 每 20 分钟 | cron(0/20 * * * ? *) | */20 * * * * |
| 每 4 小时 | cron(0 0/4 * * ? *) | 0 */4 * * * |
| 每 8 小时 | cron(0 0/8 * * ? *) | 0 */8 * * * |
| 每天凌晨 1 点 | cron(0 1 * * ? *) | 0 1 * * * |
| 每天凌晨 2 点 | cron(0 2 * * ? *) | 0 2 * * * |
| 每天凌晨 3 点 | cron(0 3 * * ? *) | 0 3 * * * |
| 每天早上 8 点 | cron(0 8 * * ? *) | 0 8 * * * |
| 每个工作日 | cron(0 0 ? * 2-6 *) | 0 0 * * 1-5 |
| 每个周末 | cron(0 0 ? * 1,7 *) | 0 0 * * 0,6 |
| 每周二 | cron(0 0 ? * 3 *) | 0 0 * * 2 |
| 每周三 | cron(0 0 ? * 4 *) | 0 0 * * 3 |
| 每周四 | cron(0 0 ? * 5 *) | 0 0 * * 4 |
| 每周六 | cron(0 0 ? * 7 *) | 0 0 * * 6 |
| 每 6 个月 | cron(0 0 1 1/6 ? *) | 0 0 1 */6 * |
常见问题
所有 AWS EventBridge 表达式都能转成 GitHub Actions 吗?
不是全部。本页 45 个常用调度中有 39 个可以等价转换,其余需要替代写法,转换器会给出。
AWS EventBridge 和 GitHub Actions 里周日怎么写?
AWS EventBridge:1(SUN=1 … SAT=7)。GitHub Actions:0。
时区会一起转过去吗?
表达式本身不带时区。AWS EventBridge:Scheduler 可设 IANA 时区,默认 UTC。GitHub Actions:UTC,或每条加 timezone:。