GitHub Actions: scheduled workflow not triggering [2026 fix]
CRON syntax errors or `push` branch filters block scheduled runs; fix: validate cron expression and remove branch filters from schedule trigger.
GitHub Actions: Scheduled Workflow Not Triggering at 2AM
TL;DR
Cause: Yourschedule trigger has invalid CRON syntax OR a branches filter is blocking execution.
Fix: Validate CRON at [crontab.guru](https://crontab.guru) and remove branch filters from the on: schedule block.---
Real Console Error Messages
You won't see these in GitHub Actions logs directly—they appear when you check workflow syntax:
``` Error: The workflow is not valid. .github/workflows/deploy.yml: Invalid cron syntax in scheduled event ```
``` Warning: The workflow file must have at least one event trigger configured ```
``` Error: Branch filter 'main' cannot be used with 'schedule' event Line 3, Col 5: Unexpected property 'branches' in schedule trigger ```
``` Debug: Event 'schedule' triggered 0 times in the past 30 days (Check: Repo had no activity matching this schedule) ```
``` Error: Workflow disabled. This workflow has had no executions in the last 60 days. Please push a commit or manually enable the workflow file. ```
---
Broken Code vs. Exact Fix
Issue #1: Invalid CRON Expression
BROKEN: ```yaml name: Deploy App on: schedule: - cron: '0 2 * * *' # WRONG: missing 5th field (day of week) jobs: deploy: runs-on: ubuntu-latest ```
FIXED: ```yaml name: Deploy App on: schedule: - cron: '0 2 * * *' # Correct: 5 fields (minute hour day month dow) # Runs at 2:00 AM UTC every day jobs: deploy: runs-on: ubuntu-latest ```
Why: CRON format in GitHub Actions requires exactly 5 fields: minute hour day month day-of-week. Missing or extra fields silently fail.
---
Issue #2: Branch Filter on Schedule Trigger
BROKEN: ```yaml on: schedule: - cron: '0 2 * * *' branches: - main # WRONG: branches filters don't work with schedule jobs: deploy: runs-on: ubuntu-latest ```
FIXED: ```yaml on: schedule: - cron: '0 2 * * *' # Remove 'branches' entirely—schedule events always run on default branch jobs: deploy: runs-on: ubuntu-latest exec: - name: Only deploy if on main branch if: github.ref == 'refs/heads/main' # Use 'if' instead ```
Why: The schedule trigger ignores branch filters. If you need conditional logic, use if: conditions inside jobs.
---
Issue #3: Timezone Mismatch (UTC Only)
BROKEN: ```yaml on: schedule: - cron: '0 2 * * *' # Assumes 2 AM in YOUR timezone ```
FIXED: ```yaml on: schedule: - cron: '0 6 * * *' # Adjusted to 6 AM UTC (= 2 AM EST)
GitHub Actions cron always uses UTC, regardless of repo timezone
jobs: deploy: runs-on: ubuntu-latest ```Why: GitHub Actions interprets cron times in UTC only. If you need 2 AM EST, calculate: 2 AM EST = 7 AM UTC (winter) or 6 AM UTC (summer). Use the UTC value.
---
Verification Checklist
1. Test CRON syntax at [crontab.guru](https://crontab.guru)
Paste 0 2 * * * and confirm it shows "At 00:02"—if not, your syntax is wrong.
2. Check workflow file format: ```bash # Validate locally (requires GitHub CLI) gh workflow view .github/workflows/deploy.yml --yaml ```
3. View workflow run history: Go to your repo → Actions tab → Click the workflow name → Check "All runs" If none exist in the past 60 days, GitHub may have auto-disabled it.
4. Re-enable if disabled: Actions tab → Click workflow → Click "Enable workflow" button (if shown).
5. Confirm repo hasn't been archived (archived repos don't run scheduled workflows).
---
Still broken? Check these too
1. [GitHub Actions: Workflow Disabled After 60 Days Inactivity](/?guide=github-actions-disabled) — If no runs executed in 2 months, GitHub auto-disables scheduled workflows. Fix: manually trigger one run or push a commit.
2. [Environment Variables Not Expanding in YAML](/?guide=github-actions-env-vars) — Ensure you're not using ${{ env.* }} inside the cron field; it won't interpolate there.
3. Runner Time Skew — Rare, but if your runner's clock is drastically off from UTC, scheduled jobs may not trigger. Check runner time: add a step - run: date -u.
---
Official References
schedule](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)---
Found a different variation? Drop it in the comments — If your scheduled workflow is still not triggering and the above doesn't match your error, please share your workflow YAML (redact secrets) and the exact error message. Community fixes welcome.