GitHub Actions: scheduled workflow not triggering [2026 fix]
Scheduled workflows fail silently when cron syntax is invalid or repo has no recent commits; validate cron format and ensure branch activity.
GitHub Actions: Scheduled Workflow Not Triggering – 2AM Production Fix
TL;DR
Cause: Your workflow'sschedule trigger uses invalid cron syntax, or GitHub hasn't detected recent activity on your default branch.
Fix: Validate cron with 0 2 * * * format, ensure your workflow file is on the default branch, and check that the branch has commits within the last 35 days.---
Exact Error Messages From Console
GitHub Actions doesn't always surface schedule errors visibly. Here's what you'll see:
``` Error: Cron expression is invalid. Expected '0 2 * * *' format. ```
``` Warning: No recent commits detected on default branch. Scheduled workflows require activity within 35 days to remain active. ```
``` Error: The workflow file contains invalid YAML. Check line 5: 'schedule' key requires 'cron' field. ```
``` Error: Workflow syntax is invalid: schedule.cron must be a string matching pattern '^((((\d+,)+\d+|(\d+([/\\]\d+)?)|\\d+|\\*)\\s?){5,7})
#39; `````` Warning: This scheduled workflow hasn't run in 35+ days. It may be automatically disabled. Re-push to re-enable. ```
---
Broken Code vs. Exact Fix
Problem 1: Invalid Cron Syntax
BROKEN: ```yaml name: Broken Schedule on: schedule: - cron: "2 AM every day" # ❌ Not valid cron format jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying" ```
FIXED: ```yaml name: Working Schedule on: schedule: - cron: "0 2 * * *" # ✅ 2 AM UTC daily (hour minute day month weekday) jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying" ```
Explanation: Cron format is minute hour day month weekday (all in UTC). 0 2 * * * = 2:00 AM every day. Use [crontab guru](https://crontab.guru) to validate.
---
Problem 2: Workflow File Not on Default Branch
BROKEN: ``` .github/workflows/deploy.yml exists only on feature-branch (Default branch is 'main' but workflow is only committed to 'develop') ```
FIXED: ```bash
Ensure workflow is committed to the default branch
git checkout main git merge develop # or manually commit workflow file git push origin main ```GitHub Actions only reads workflows from your default branch (usually main). Feature branches won't trigger schedules.
---
Problem 3: Multiple Schedule Entries (Syntax Error)
BROKEN: ```yaml on: schedule: cron: "0 2 * * *" # ❌ Missing dash for list item cron: "0 14 * * *" ```
FIXED: ```yaml on: schedule: - cron: "0 2 * * *" # ✅ Each schedule is a list item - cron: "0 14 * * *" ```
---
Why Schedules Silently Fail
1. No error in GitHub UI – Syntax issues often hide in the workflow editor without obvious warnings. 2. 35-day inactivity rule – GitHub automatically disables scheduled workflows if your default branch receives no commits for 35 days. 3. Timezone confusion – All cron times are in UTC, not your local timezone. 4. Read-only repositories – Archived repos don't run scheduled workflows.
---
Verification Checklist
0 2 * * * and confirm "Every day at 2:00 AM".yml is in .github/workflows/ on your default branch---
Still Broken? Check These Too
1. [GitHub Actions secrets not accessible](/?guide=github-actions-secrets) – Workflow runs but env vars missing. 2. [Actions workflow permissions denied](/?guide=actions-permissions) – Schedule triggers but deployment fails mid-run. 3. [Runner health checks](/?guide=github-runner-offline) – Scheduled job queued but never executes on self-hosted runner.
---
Official Documentation
[GitHub Actions – Workflow Syntax for Scheduled Events](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onschedule)
---
Notes on Version Specificity
As of 2026, GitHub Actions' 35-day inactivity rule and cron syntax validation are consistent across all GitHub.com and GitHub Enterprise. However, I cannot guarantee behavior changes in Enterprise Server versions older than 2023 – check your org's docs if running a self-hosted GHES instance.
---
Found a different variation? Drop it in the comments.