GitHub Actions: scheduled workflow not triggering [2026 fix]
Scheduled workflows fail silently when cron syntax is invalid or workflow file has syntax errors. Fix: validate cron with crontab.guru and ensure YAML is properly formatted.
GitHub Actions: Scheduled Workflow Not Triggering at 2AM
TL;DR
Cause: Yourschedule: cron expression is malformed OR your workflow YAML has indentation/syntax errors that GitHub silently skips.
Fix: Validate cron syntax at [crontab.guru](https://crontab.guru) and re-check YAML indentation in .github/workflows/your-file.yml.---
Exact Error Messages From Console
GitHub Actions scheduled workflows typically fail *silently* with no error in your logs. However, you may see these indicators:
``` 1. Workflow file parsing error Error: The workflow is not valid. .github/workflows/schedule.yml (Line: 12, Col: 5): mapping values are not allowed here ```
``` 2. Invalid cron syntax (appears in workflow settings UI) Error: The schedule does not meet minimum interval of 5 minutes ```
``` 3. GitHub Actions runner log (if workflow DOES trigger but immediately fails) Run /opt/runner-cron/cron-trigger.sh /opt/runner-cron/cron-trigger.sh: line 1: unexpected EOF while looking for matching `"' Error: Workflow trigger error ```
``` 4. Repository settings > Actions > Workflows shows: ⚠️ This workflow has a parse error and is not active ```
```
5. Local validation with act tool:
Error loading workflow: yaml: line X: mapping values are not allowed here
```
---
Broken Code vs. Exact Fix
Issue #1: Malformed Cron Expression
BROKEN: ```yaml name: Daily Deploy
on: schedule: - cron: '0 0 * * *' # This looks correct but timezone matters jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying" ```
FIXED: ```yaml name: Daily Deploy
on: schedule: - cron: '0 2 * * *' # 2 AM UTC (add comment showing your timezone) # CRON_TZ: America/New_York # Note: env var approach is NOT supported in schedule jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying at 2 AM UTC" ```
Key difference: GitHub Actions schedule: uses UTC only. No timezone override is supported in the schedule: trigger itself. To work around this, add 6 hours to desired time if you need 2 AM EST (use 0 7 * * * instead).
---
Issue #2: YAML Indentation Error (Most Common)
BROKEN: ```yaml name: Scheduled Job on: schedule: # Missing 2-space indent - cron: '0 2 * * *' jobs: check: runs-on: ubuntu-latest steps: - run: echo test ```
FIXED: ```yaml name: Scheduled Job on: schedule: # Proper 2-space indent under 'on:' - cron: '0 2 * * *' jobs: check: # Proper indent under 'jobs:' runs-on: ubuntu-latest steps: - run: echo test ```
---
Issue #3: Cron Field Count Error
BROKEN: ```yaml on: schedule: - cron: '0 2 *' # Only 3 fields; needs 5 ```
FIXED: ```yaml on: schedule: - cron: '0 2 * * *' # Minute Hour Day-of-Month Month Day-of-Week (all 5 required) # Executes at 02:00 UTC every day ```
---
Verification Steps
1. Check GitHub UI: Repository → Actions → All workflows. Look for ⚠️ parse error badge. 2. Validate YAML locally: ```bash npm install -g js-yaml js-yaml .github/workflows/schedule.yml ``` 3. Test cron: Paste your expression at [crontab.guru](https://crontab.guru)—it will show next 5 execution times. 4. Check workflow runs: Actions tab shows "scheduled" trigger only if workflow is valid.
---
Still Broken? Check These Too
1. Repository fork settings: Workflows are disabled by default on forks. Go to Actions tab → "I understand, enable workflows."
2. Branch protection rules: Some orgs require specific branch names for scheduled workflows. Verify workflow file is on default branch (main or master).
3. Workflow file permissions: File must be in .github/workflows/ directory with .yml or .yaml extension. Ensure default branch is not shallow-cloned.
---
Version/Behavior Uncertainty Note
As of 2026, GitHub Actions scheduling behavior is consistent across all regions. However, I cannot verify: if GitHub's internal cron parser was updated to support additional syntax (e.g., day-of-week aliases like MON instead of 1). Check [official GitHub Actions documentation](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule) for latest supported cron format.
---
Related Guides
---
Official Documentation
[GitHub Actions: Scheduled Workflows – Official Docs](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)
---
Found a different variation? Drop it in the comments—2 AM failures are often environment-specific!