GitHub Actions: scheduled workflow not triggering [2026 fix]

CRON syntax error or timezone mismatch prevents scheduled jobs. Fix: validate cron expression and ensure UTC timezone in schedule.

GitHub Actions: Scheduled Workflow Not Triggering [2am Emergency Fix]

TL;DR

Cause: Invalid cron syntax or workflow file not committed to default branch. Fix: Validate cron expression at crontab.guru and ensure .github/workflows/ files exist on main/master.

---

Real Console Error Messages

Error 1: Silent Failure (Most Common)

``` No logs visible in Actions tab Workflow doesn't appear in "Scheduled runs" list Last run timestamp shows never executed ```

Error 2: Workflow Parse Error

``` Error: Parse error on line 5 column 15: Expected ":" but got "*" at line 5, column 15 ```

Error 3: Invalid Cron Expression

``` Warning: The workflow file at .github/workflows/scheduled-job.yml is invalid. ".github/workflows/scheduled-job.yml (Line 5, Col 3): Invalid cron expression: '* * * * * *' (6 fields detected, expected 5)" ```

Error 4: File Committed to Wrong Branch

``` No matching workflow found for ref 'refs/heads/develop' Scheduled workflows only run on the default branch (main) ```

Error 5: Missing Permissions

``` Permission denied: Cannot trigger workflow_run events Schedule event requires write access to repository ```

---

Broken Code → Fixed Code

Problem 1: Invalid Cron Syntax

❌ BROKEN: ```yaml name: Broken Scheduler on: schedule: - cron: '* * * * * *' # 6 fields = WRONG (includes seconds) jobs: scheduled-task: runs-on: ubuntu-latest steps: - run: echo "This never runs" ```

✅ FIXED: ```yaml name: Fixed Scheduler on: schedule: - cron: '0 2 * * *' # 5 fields: minute hour day month weekday (UTC) jobs: scheduled-task: runs-on: ubuntu-latest steps: - run: echo "Runs daily at 2:00 AM UTC" ```

Problem 2: Timezone Confusion

❌ BROKEN: ```yaml on: schedule: - cron: '0 14 * * *' # Assumed 2pm local time

Developer in PST expects 2pm PT, but GH always interprets as UTC

```

✅ FIXED: ```yaml name: Timezone-Aware Schedule on: schedule: - cron: '0 14 * * *' # 2:00 PM UTC = 6:00 AM PST / 9:00 AM EST jobs: log-timezone: runs-on: ubuntu-latest steps: - name: Record execution time run: date -u # Always verify in logs ```

Problem 3: File Not on Default Branch

❌ BROKEN: ```

Workflow exists in feature-branch but not merged to main

Developer: "Why doesn't my workflow trigger at midnight?"

Reality: GitHub only runs scheduled workflows on default branch

```

✅ FIXED: ```bash

Ensure workflow is merged to default branch

git checkout main git pull origin main ls -la .github/workflows/ # Verify file exists locally git push origin main # If modified, push changes

Then wait 5-10 minutes for GitHub to register the schedule

```

---

Step-by-Step Troubleshooting

Step 1: Validate Cron Expression

  • Open https://crontab.guru
  • Paste your cron string (e.g., 0 2 * * *)
  • Confirm schedule matches your expectation
  • Remember: GitHub uses UTC timezone always
  • Step 2: Check File Location & Branch

    ```bash

    Your workflow MUST be in default branch

    git branch -a # Identify default branch (usually main or master) ls .github/workflows/ # Confirm filename matches Actions tab ```

    Step 3: Verify YAML Syntax

  • Use https://yamllint.com to validate syntax
  • GitHub's parse error messages can be cryptic; external validation helps
  • Step 4: Wait & Monitor

  • After pushing workflow changes, wait 10 minutes
  • GitHub may take time to register new schedules
  • Check Actions tab; scheduled job should appear in list
  • Step 5: Force Test Run

    ```yaml on: schedule: - cron: '0 2 * * *' workflow_dispatch: # Add this to test manually jobs: test: runs-on: ubuntu-latest steps: - run: echo "Manual test successful" ``` Then click "Run workflow" button in GitHub UI to test logic immediately.

    ---

    Still Broken? Check These Too

    1. Repository Archived or Disabled: Archived repos disable all Actions. Check Settings → General. 2. Actions Disabled in Settings: Go to Settings → Actions → General → ensure "Allow all actions and reusable workflows" is selected. 3. Personal Access Token Expiration: If using secrets.GITHUB_TOKEN, verify it hasn't expired (shouldn't happen with default token, but custom tokens can).

    ---

    Related Guides

  • [GitHub Actions workflow_dispatch not triggering](/?guide=workflow-dispatch-broken)
  • [Debugging GitHub Actions permission errors](/?guide=actions-permissions)
  • ---

    Official Documentation

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

    ---

    Version Notes

    As of 2026, this behavior remains consistent. GitHub does not officially support timezone configuration within workflows—UTC is enforced. If this changes, the docs will reflect it.

    ---

    Found a different variation? Drop it in the comments below so we can 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