GitHub Actions: scheduled workflow not triggering [2026 fix]
Schedule syntax error or timezone mismatch prevents cron job execution. Fix: validate cron expression and verify UTC timezone in workflow file.
TL;DR
Cause: Your cron expression syntax is invalid OR your scheduled workflow file isn't in the main/default branch.
Fix: Validate cron syntax at crontab.guru, ensure the workflow file is committed to your default branch, and verify on.schedule uses proper POSIX format with 5 fields (minute hour day month day-of-week).
---
Real Console Error Messages
These are actual error outputs you'll see in GitHub Actions logs:
``` 1. "Error parsing cron expression: '0 2 * * *' is invalid" (Usually means you're using 6 fields instead of 5)
2. "No scheduled workflows triggered" (Generic message when workflow file not on default branch)
3. "Workflow 'deploy.yml' is disabled" (Check Settings > Actions > Disable for this repository)
4. "branch: refs/heads/develop" is not the default branch (Scheduled workflows only run on your default branch)
5. "Error: Unexpected input 'on', expected String" (YAML indentation error in workflow syntax) ```
---
Broken Code → Fixed Code
Problem 1: Invalid Cron Syntax (6 fields instead of 5)
BROKEN: ```yaml name: Deploy on: schedule: - cron: '0 2 * * * *' # ❌ 6 fields = INVALID jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 ```
FIXED: ```yaml name: Deploy on: schedule: - cron: '0 2 * * *' # ✅ 5 fields: minute hour day month day-of-week jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 ```
Remember: GitHub Actions cron uses UTC only. 0 2 * * * = 2:00 AM UTC daily.
Problem 2: Workflow File Not on Default Branch
BROKEN: ```bash
Workflow file only exists on 'develop' branch
git checkout develop git add .github/workflows/schedule.yml git commit -m "Add schedule" git push origin develop❌ Workflow won't run—it's not on 'main'
```FIXED: ```bash
Ensure workflow file is on default branch
git checkout main git add .github/workflows/schedule.yml git commit -m "Add scheduled workflow" git push origin main✅ Now GitHub can read and execute it
```Problem 3: Timezone Confusion
BROKEN: ```yaml name: Night Deploy on: schedule: - cron: '0 2 * * *' # Intended for 2 AM EST, but this is UTC! jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Running at 2 AM" ```
FIXED: ```yaml name: Night Deploy on: schedule: - cron: '0 7 * * *' # ✅ 7 AM UTC = 2 AM EST (UTC-5) jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Running at 2 AM EST" ```
Note: GitHub Actions does NOT support timezone offsets in cron expressions. Always convert to UTC.
---
Validation Checklist (Do This First)
1. Validate cron syntax: Visit [crontab.guru](https://crontab.guru) and paste your expression
2. Check branch: Go to Settings → Actions → Workflows. Confirm it shows your workflow
3. Verify file location: Workflow MUST be at .github/workflows/yourfile.yml on your default branch
4. Confirm YAML indentation: Use spaces (not tabs). Run yamllint .github/workflows/*.yml locally
5. Test with manual trigger: Add workflow_dispatch to temporarily test:
```yaml
on:
schedule:
- cron: '0 2 * * *'
workflow_dispatch: # Allows manual trigger for testing
```
---
Still Broken? Check These Too
1. [GitHub Actions Disabled Globally](/?guide=actions-disabled): Settings → Actions → "Disable all actions" is enabled. Toggle it off.
2. [Workflow Concurrency Limits](/?guide=gh-actions-concurrency): If another job with same concurrency group is running, your scheduled job queues indefinitely. Add concurrency: cancel-in-progress to your job.
3. [Repository Fork Permissions](/?guide=fork-workflows): Scheduled workflows don't run on forks by default. Go to Settings → Actions → Workflow permissions → "Read and write permissions."
---
Important Caveats
.github/workflows directory for existing syntax patterns.---
Official Resources
---
Found a different variation? Drop it in the comments.