Cron schedule · Updated

GitHub Actions cron: on.schedule syntax, time zones, and why a scheduled job doesn't run

Schedule a GitHub Actions workflow with cron: on.schedule syntax, UTC and the timezone key, the 5-minute minimum, delays, and why a scheduled job isn't running.

A GitHub Actions cron schedule goes under on.schedule in a workflow file, with standard five-field cron syntax in quotes. Times are UTC unless you add a timezone, the shortest interval is every 5 minutes, and runs can start late when Actions is busy.

name: Nightly report
on:
  schedule:
    - cron: '17 3 * * *'        # 03:17 UTC every day
  workflow_dispatch:            # adds a Run workflow button
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: ./scripts/report.sh

The cron syntax

The five fields are minute (0 to 59), hour (0 to 23), day of month (1 to 31), month (1 to 12 or JAN to DEC) and day of week (0 to 6 or SUN to SAT). You can use *, lists (1,15), ranges (9-17) and steps (*/15). Quote the expression, since YAML treats a leading * as special.

Schedulecron: value
Every 15 minutes'*/15 * * * *'
Every hour at :23'23 * * * *'
Weekdays at 08:30 UTC'30 8 * * 1-5'
Mondays at 09:00 UTC'0 9 * * 1'
1st of the month at 06:00 UTC'0 6 1 * *'

To schedule in local time, add a time zone to the entry (as of October 2026):

on:
  schedule:
    - cron: '30 8 * * 1-5'
      timezone: 'Europe/Berlin'

One workflow can have several cron entries; github.event.schedule tells a step which one fired.

Why a GitHub Actions cron job is not running

  • The file isn't on the default branch. Scheduled workflows only run from the default branch, on its latest commit.
  • The repository has been quiet for 60 days. In public repositories, GitHub disables scheduled workflows after 60 days without activity, and they stay off until you re-enable them on the Actions tab or commit a change to the cron line.
  • It is a fork. Scheduled workflows are disabled by default in forks of public repositories.
  • It is late, not missing. Runs can be delayed under load, worst at the start of every hour, and some queued jobs may be dropped. Move to an odd minute like :17.
  • The interval is under 5 minutes, or the expression uses @daily or similar, which GitHub doesn't support.
  • You expected local time. Without timezone, 0 9 * * * is 09:00 UTC.
  • Someone disabled the workflow. Select it in the Actions tab sidebar and click Enable workflow, or run gh workflow enable <file>.

Platform notes

GitHub Actions cron is less precise than a Linux crontab or a Kubernetes CronJob. If a job must start at an exact minute, run it from a server's crontab or another scheduler and trigger the workflow through workflow_dispatch with gh workflow run. For other intervals, see cron every 5 minutes and cron every hour.

Running an AI agent on a GitHub Actions schedule

A scheduled workflow can install Claude Code or Codex and run a skill headless, with API keys stored as repository secrets. The scheduled skills page has a workflow you can copy, and GitHub Actions failed runs reports each weekday morning which runs broke on the default branch.

Questions

What time zone does GitHub Actions cron use?

UTC by default. As of October 2026, GitHub's docs also let you add a timezone key with an IANA name, such as America/New_York, next to each cron entry.

What is the shortest GitHub Actions schedule?

Once every 5 minutes. A */1 or * * * * * schedule won't run every minute.

Can a scheduled workflow run on a branch other than the default?

No. Scheduled workflows run on the latest commit of the default branch, and the workflow file has to exist there.

How do I test a scheduled workflow without waiting?

Add workflow_dispatch: under on:. A Run workflow button then appears on the Actions tab, and gh workflow run <file> starts it from the terminal.

Does @daily work in GitHub Actions?

No. GitHub Actions doesn't support @yearly, @monthly, @weekly, @daily, @hourly or @reboot. Write five fields, such as 0 0 * * *.

More cron schedules

All cron schedules

Know when your agents need you

Briefkin puts your Claude Code, Codex and Cursor sessions on one board: working, needs you, done or failed. Telegram pings you when one is waiting on you, and scheduled skills post their reports next to them.

Free during the open beta. No card.