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 changesThen wait 5-10 minutes for GitHub to register the schedule
```---
Step-by-Step Troubleshooting
Step 1: Validate Cron Expression
0 2 * * *)Step 2: Check File Location & Branch
```bashYour 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
Step 4: Wait & Monitor
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
---
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.