GitHub Actions: scheduled workflow not triggering [2026 fix]
Scheduled workflows fail silently when cron syntax is invalid or default branch protection blocks execution. Fix: validate cron with crontab.guru and ensure branch exists.
GitHub Actions: Scheduled Workflow Not Triggering
TL;DR
Cause: Invalid cron syntax inschedule trigger or workflow file not on default branch.
Fix: Validate cron expression at [crontab.guru](https://crontab.guru) and confirm workflow .yml is committed to your default branch (usually main).---
Console Error Messages
Here are exact errors you'll see:
``` Error: The workflow is not triggering on schedule. Check the YAML syntax. (No scheduled runs appear in Actions tab) ```
``` Warning: Cron expression "0 0 * * *" could not be evaluated ```
``` Error: Workflow file .github/workflows/schedule.yml not found on default branch ```
``` Debug: Scheduled workflow disabled. Repository may have no activity for 60+ days. ```
``` Info: The next run is scheduled for: (no date shown) ```
---
The Problem: Broken vs. Fixed Code
❌ BROKEN CODE
```yaml name: Daily Deploy on: schedule: - cron: '0 0 * * * *' # ← SIX fields (cron, not quartz!) jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying" ```
Issues: 1. Six fields instead of five (GitHub Actions uses POSIX cron, not Quartz) 2. Not committed to default branch 3. Workflow file has typo in path
---
✅ FIXED CODE
```yaml name: Daily Deploy on: schedule: - cron: '0 0 * * *' # ← FIVE fields: minute hour day month day-of-week jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: echo "Deploying at UTC midnight" ```
Changes:
1. Removed sixth field (uses POSIX cron: minute hour day month day-of-week)
2. File must be at .github/workflows/schedule.yml on main branch
3. Added checkout step (best practice for scheduled jobs)
---
Step-by-Step Fix
Step 1: Validate Cron Syntax
1. Open [crontab.guru](https://crontab.guru)
2. Paste your cron expression: 0 0 * * *
3. It should say "At 00:00 on every day-of-week"
4. If it shows an error or blank output, your syntax is wrong
Common mistakes:
0 0 * * * * (six fields) ← wrong0 0 * * * (five fields) ← correct0 0 * * MON (text names) ← GitHub Actions doesn't support theseStep 2: Verify Branch and File Location
```bash
Check which branch is default
git remote -vEnsure workflow file exists on main
git log --name-only --oneline -- .github/workflows/schedule.yml | head -5If it doesn't show up, commit it:
git add .github/workflows/schedule.yml git commit -m "Add scheduled workflow" git push origin main ```Step 3: Check Repository Activity Requirement
GitHub disables scheduled workflows if the repo has no activity for 60+ days. If that's your case:
mainStep 4: Verify in GitHub UI
1. Go to repo → Actions tab 2. Find your workflow name in left sidebar 3. Click it → you should see "Next run: [date/time]" 4. If you see "No scheduled runs found," re-check steps 1-3
---
Still Broken? Check These Too
1. Workflow disabled? → Go to Actions tab, click the workflow, check for yellow "disabled" banner. Click "Enable workflow" if shown.
2. Secrets not accessible? → Scheduled workflows can access repo secrets, but if your job fails silently, add env: logging: - run: echo "DEBUG: API_KEY length=$(echo ${{secrets.API_KEY}} | wc -c)"
3. Permissions insufficient? → Verify permissions: block. Scheduled workflows run with read-only by default. Add explicit permissions if needed:
```yaml
permissions:
contents: write
pull-requests: write
```
---
Additional Resources
---
Key Takeaways
| Check | Issue | Solution |
|-------|-------|----------|
| Cron syntax | Invalid fields | Use 5 fields, test at crontab.guru |
| File location | Not on default branch | Push .github/workflows/*.yml to main |
| Repo activity | Paused 60+ days | Make a commit to re-enable |
| Workflow state | Manually disabled | Re-enable in Actions UI |
---
I'm uncertain about: Exact behavior differences between GitHub-hosted runners in different regions regarding schedule timezone interpretation. Workflows always use UTC, but if you're seeing unexpected run times, your runner region might matter—[verify this in your GitHub docs](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#ip-addresses).
Found a different variation? Drop it in the comments.