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