Cron Atlas

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.

minute30
hour5
day of monthevery day
monthevery month
day of weekMon–Fri

At 05:30, Monday through Friday.

Next 10 runs

Clock changes

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

FieldValuesSpecial characters
Minute0–59* , - /
Hour0–23* , - /
Day of month1–31* , - /
Month1–12 or JAN–DEC* , - /
Day of week0–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 * * * * to 0 * * * *.
  • 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 @daily are not supported.
  • Several cron entries can trigger one workflow. github.event.schedule tells you which one fired, which is how to handle an “either day” schedule without relying on the OR rule.

Examples to try

Sources

Other dialects