GitHub Actions: scheduled workflow not triggering [2026 fix]

Scheduled workflows fail silently when cron syntax is invalid or pushed to non-default branches; fix: validate cron with cronitor and ensure workflow file is on main/master.

GitHub Actions: Scheduled Workflow Not Triggering – 2am Production Fix

TL;DR

Cause: Your cron syntax is invalid OR your workflow file isn't on your default branch (main/master). Fix: Validate cron expression at [cronitor.io](https://cronitor.io/cron-schedule-expression-editor) and confirm .github/workflows/ is committed to your default branch, not a feature branch.

---

Real Console Error Messages

GitHub Actions won't show these in your UI—you'll find them in the workflow run logs or not see a run at all:

``` 1. "Cron job is invalid" (Silent failure—no workflow run appears)

2. "Request failed: 422 Unprocessable Entity" (When pushing invalid schedule syntax to main)

3. "Scheduled workflow did not run" (Workflow exists but cron never fires—check branch)

4. "fatal: pathspec '.github/workflows/schedule.yml' did not match any files" (Workflow file not on default branch)

5. "Error: no matching manifest for linux/arm64" (Unrelated container issue, but sometimes conflated with scheduling problems) ```

---

Broken Code → Fixed Side-by-Side

Problem 1: Invalid Cron Syntax

❌ BROKEN: ```yaml name: Deploy on: schedule: - cron: '0 0 * * * *' # 6 fields (Unix cron) – GitHub expects 5

jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploy!" ```

✅ FIXED: ```yaml name: Deploy on: schedule: - cron: '0 0 * * *' # Correct: 5 fields (minute hour day month weekday)

jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploy!" ```

Why: GitHub Actions uses POSIX cron (5 fields), not standard Unix cron (6 fields with seconds).

---

Problem 2: Workflow on Feature Branch Instead of Default

❌ BROKEN: ```bash

You committed to 'feature/scheduled-task' branch

git checkout -b feature/scheduled-task echo 'schedule: cron: "0 2 * * *"' >> .github/workflows/nightly.yml git push origin feature/scheduled-task

❌ Workflow never runs—it's not on main

```

✅ FIXED: ```bash

Commit to default branch (main/master)

git checkout main echo 'schedule: cron: "0 2 * * *"' >> .github/workflows/nightly.yml git add .github/workflows/nightly.yml git commit -m "Add nightly scheduled workflow" git push origin main

✅ Now scheduled workflow will trigger

```

Why: GitHub only triggers scheduled workflows from files on your repository's default branch (set in Settings > Branches > Default branch).

---

Problem 3: Using UTC Timezone Without Awareness

❌ BROKEN: ```yaml name: Morning Report on: schedule: - cron: '0 8 * * MON' # "8am Monday" jobs: report: runs-on: ubuntu-latest steps: - run: date # Runs at 8:00 UTC, not 8:00 your local time ```

✅ FIXED: ```yaml name: Morning Report on: schedule: - cron: '0 13 * * MON' # 8am EST = 1pm UTC (during winter) jobs: report: runs-on: ubuntu-latest steps: - run: date - run: echo "UTC is the only supported timezone for GitHub Actions cron" ```

Why: All GitHub Actions cron schedules are in UTC. Convert your desired time to UTC (or add a comment for future you).

---

Still Broken? Check These Too

1. Workflow file syntax error elsewhere – Even one invalid YAML character stops the entire workflow from registering. Run yamllint .github/workflows/*.yml locally before pushing.

2. PAT token or GITHUB_TOKEN permissions – If your workflow writes back to the repo, check that your token has contents: write and workflows: write permissions. [See GitHub token scopes](/?guide=github-token-permissions).

3. Repository archived or disabled – Scheduled workflows don't run on archived repos. Check Settings > Danger Zone to confirm your repo is active. Also verify Actions aren't disabled in Settings > Actions > General.

---

Verification Checklist

  • [ ] Cron expression is exactly 5 fields (minute hour day month weekday)
  • [ ] Tested cron at [cronitor.io](https://cronitor.io/cron-schedule-expression-editor)
  • [ ] Workflow .yml file is committed to main or your default branch (not a PR)
  • [ ] Repository is not archived
  • [ ] GitHub Actions is enabled (Settings > Actions > General)
  • [ ] No YAML syntax errors (yamllint passes)
  • [ ] Workflow file is in .github/workflows/ directory
  • [ ] Remembered that all times are UTC
  • ---

    Related Guides

  • [Workflow permissions and token scopes](/?guide=github-token-scopes)
  • [Troubleshooting GitHub Actions](/?guide=github-actions-debugging)
  • ---

    Official Documentation

    [GitHub Actions: Scheduled events](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)

    ---

    Notes on Version/Behavior

    As of 2026, GitHub Actions cron behavior has not changed significantly since 2021, but I'm flagging potential areas where your specific setup might differ:

  • Enterprise Server: Some versions have different timezone handling; check your instance documentation.
  • Organization policies: Some orgs restrict Actions on certain branches; verify in your org settings.
  • Free tier rate limits: Scheduled workflows might queue if you hit concurrent job limits; check your plan.
  • If you see different behavior, drop a note in the comments below.

    ---

    Found a different variation? Drop it in the comments.

    🔥 0d
    LIVE
    ↓ PlanetScale rage spiking •⚠ Vercel pricing complaints •↑ Railway gaining fast •↑ Supabase happiness rising •↑ Resend loved by devs •↓ PlanetScale rage spiking •⚠ Vercel pricing complaints •↑ Railway gaining fast •↑ Supabase happiness rising
    DEVELOPER PAIN RADAR // Loading...

    Developers complain.
    Opportunities appear.

    We track what developers are struggling with today — and what opportunities that creates.

    —
    guides today
    —
    avg happiness
    🔥 Pain
    📖 Guides
    🔭 Explore
    👤 Mine
    🔥 Pain Radar — rage scores today
    ↗ share
    💡 Opportunity Feed — pain = market gap
    📈 Tool Momentum
    all scores →
    📖 Latest Guide
    all guides →
    📖 All Guides
    📊 Tool Scores
    + Submit
    📰 Hacker News
    ➕ Submit a Tool
    ← back