GitHub Actions cron schedules
Five POSIX fields under on.schedule, in UTC unless you set timezone. The syntax is easy. The surprises are in when runs actually happen.
At 05:30, Monday through Friday.
Next 10 runs
Clock changes
In your config
In the other dialects
“Same schedule” means the same clock times. Schedulers still treat a clock change differently, as the table on the home page shows.
Keyboard: / edit the expression, 1 to 6 change dialect, t time zone, n next clock change, c copy the link, Esc leave a field.
Fields
| Field | Values | Special characters |
|---|---|---|
| Minute | 0–59 | * , - / |
| Hour | 0–23 | * , - / |
| Day of month | 1–31 | * , - / |
| Month | 1–12 or JAN–DEC | * , - / |
| Day of week | 0–6 or SUN–SAT | * , - / |
Special characters
*- Any value:
15 * * * *runs at minute 15 of every hour. ,- A list:
2,10 4,5 * * *. -- A range:
30 4-6 * * *. /- A step:
20/15 * * * *runs at minutes 20, 35 and 50.
The two day fields
GitHub’s docs link to POSIX cron, which fires when either day field matches if both are restricted. GitHub’s parser is not public, so this follows POSIX and says so when it applies. A */n beside the other day field is where cron implementations disagree, so this tool does not show runs for it.
Time zones
UTC by default. Add a timezone key beside cron, with an IANA name such as America/New_York.
Clock changes
GitHub documents the forward case only: a time in the skipped hour advances to the next valid time, so a 2:30 AM schedule runs at 3:00 AM. It says nothing about the repeated hour when clocks go back. This tool shows those runs once and flags them as undocumented.
Gotchas
- The shortest interval is once every 5 minutes.
* * * * *is accepted but will not run every minute. - Schedules can be delayed at high load, including the start of every hour. At sufficient load, queued jobs may be dropped. GitHub’s advice is to pick a different time in the hour, so prefer
17 * * * *to0 * * * *. - Scheduled workflows only run on the default branch, using its latest commit, and the workflow file must exist there.
- In a public repository, scheduled workflows are disabled after 60 days with no repository activity.
- Shortcuts such as
@dailyare not supported. - Several
cronentries can trigger one workflow.github.event.scheduletells you which one fired, which is how to handle an “either day” schedule without relying on the OR rule.
Examples to try
- 30 5 * * 1-505:30 on weekdays, the docs’ exampleAt 05:30, Monday through Friday
- 15 4,5 * * *Minute 15 of hours 4 and 5At 04:15 and 05:15
- 20/15 * * * *Minutes 20, 35 and 50 of every hourEvery 15 minutes from minute 20 (20, 35, 50)
- 17 * * * *Hourly, away from the top of the hourAt minute 17 of every hour
- 30 5,17 * * 2,4Twice a day on Tuesdays and ThursdaysAt 05:30 and 17:30, on Tuesdays and Thursdays
- 30 2 * * *Try it in America/New_York near MarchAt 02:30