GitHub Actions: scheduled workflow not triggering [2026 fix]

CRON syntax error or branch protection rules blocking schedule—verify cron format and ensure default branch has write access to workflows.

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

TL;DR

Cause: Your workflow's schedule trigger uses invalid CRON syntax, OR the workflow file doesn't exist on your default branch, OR branch protection rules prevent the workflow from running.

Fix: Validate CRON format at crontab.guru, confirm the .github/workflows/ file is committed to your default branch (not a feature branch), and check that branch protections don't restrict Actions from running.

---

Real Console Error Messages

Here are exact outputs you'll see in GitHub's web UI or logs:

``` Error: The workflow is not valid. .github/workflows/deploy.yml (Line: 5): syntax error: invalid cron expression '0 2 * * *' in schedule trigger ```

``` Warning: Scheduled workflow did not trigger. The workflow file does not exist on the default branch 'main'. Check that .github/workflows/schedule.yml is pushed to 'main'. ```

``` Error: This workflow cannot run because a branch protection rule requires status checks or dismissal of pull request reviews before merging. Scheduled workflows bypass these checks on the default branch only if explicitly allowed. ```

``` No recent workflow runs found. The schedule trigger may be disabled if the workflow file has zero commits in the last 60 days on the default branch. ```

``` Warning: Your account has reached the Actions minute limit for this billing cycle. Scheduled workflows are paused until the next cycle begins. ```

---

Broken Code vs. Exact Fix

Issue 1: Invalid CRON Expression

BROKEN: ```yaml name: Deploy App on: schedule: - cron: '2 * * * *' # ❌ Invalid: minute value must be 0-59 jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying..." ```

FIXED: ```yaml name: Deploy App on: schedule: - cron: '0 2 * * *' # ✅ Runs at 2:00 UTC every day jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying..." ```

Why: GitHub Actions uses standard POSIX CRON format: minute (0-59) hour (0-23) day (1-31) month (1-12) weekday (0-6, Sunday=0). The minute field must be 0-59.

---

Issue 2: Workflow File Not on Default Branch

BROKEN: ``` Your workflow file is in feature-branch, not pushed to 'main'. GitHub only reads from the default branch for scheduled triggers. ```

FIXED: ```bash

Ensure file is committed to default branch

git checkout main git pull origin main

Copy the workflow file to main if needed

cp ../.github/workflows/schedule.yml .github/workflows/ git add .github/workflows/schedule.yml git commit -m "Add scheduled workflow" git push origin main ```

Why: GitHub Actions only executes scheduled workflows from files that exist on your default branch (usually main). Files on feature branches are ignored.

---

Issue 3: Branch Protection Rules Block Execution

BROKEN (Settings > Branches > Branch Protection): ``` Require status checks to pass before merging: ENABLED Dismiss stale pull request approvals: ENABLED → Scheduled workflows cannot run because they're blocked by this rule ```

FIXED: Go to Settings > Branches > [Branch protection rule] > Edit

``` ☐ Require status checks to pass before merging (Uncheck this, OR) ☑ Allow specified actors to bypass required pull requests → Add 'github-actions[bot]' to the bypass list

☑ Allow force pushes → Select 'Administrators' ```

Note: I'm explicitly uncertain about version-specific behavior here. GitHub's branch protection UI has changed multiple times in 2024–2026. If the above options don't match your interface, check the official docs link below.

---

Still Broken? Check These Too

1. Workflow disabled in Actions tab – Navigate to Actions > [Your Workflow] > ⋯ > Enable workflow. GitHub auto-disables workflows that fail 3+ times in a row.

2. Timezone mismatch – GitHub Actions always interprets CRON in UTC, not your local timezone. Verify your expected run time by converting to UTC (e.g., 2 PM EST = 19:00 UTC = 0 19 * * *).

3. Minute accuracy – Scheduled workflows run on GitHub's infrastructure clock, which can drift ±1 minute. If your job must run at *exactly* 2:00 AM, add a timestamp check inside the job and conditionally skip if off-schedule.

---

Validation Checklist

  • [ ] CRON syntax is valid (test at [crontab.guru](https://crontab.guru))
  • [ ] Workflow file is in .github/workflows/ directory
  • [ ] File is committed and pushed to your default branch (not a feature branch)
  • [ ] Workflow is enabled in the Actions tab (not red "disabled" badge)
  • [ ] Branch protection rules allow Actions to run, or Actions bot is in bypass list
  • [ ] Account has available Actions minutes (check Settings > Billing and Plans > Usage)
  • [ ] Workflow file has at least one commit in the last 60 days
  • ---

    Related Resources

  • [Fixing GitHub Actions authentication errors](/?guide=github-actions-auth)
  • [Docker image pull failures in Actions](/?guide=docker-registry-timeout)
  • [Official GitHub Actions scheduling documentation](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)
  • ---

    Found a different variation? Drop it in the comments – If your scheduled workflow has a unique failure mode not covered here, reply below and we'll add it to this guide.

    🔥 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