How to Handle Scheduled Run Delays in GitHub Actions
GitHub schedules are best-effort and can be delayed or dropped during high load, so never rely on an exact minute.
Move off :00 to the least-congested minutes, keep jobs idempotent so a late run is harmless, and add workflow_dispatch for a manual re-trigger when a run is skipped.
Steps
- Schedule at an odd minute rather than the top of the hour.
- Make the job idempotent so a delayed run does no harm.
- Add
workflow_dispatchto rerun manually if a schedule is missed.
Workflow
.github/workflows/ci.yml
on:
schedule:
- cron: '23 4 * * *' # off-peak minute reduces queueing
workflow_dispatch: # manual rerun if a scheduled run is dropped
jobs:
task:
runs-on: ubuntu-latest
steps:
- run: ./idempotent-task.shGotchas
- A high-demand schedule can be dropped entirely, not just delayed.
- Latchkey managed runners keep spare capacity and auto-retry transient failures, so scheduled jobs start sooner.
Related guides
How to Stagger Multiple Scheduled Jobs in GitHub ActionsSpread several GitHub Actions cron triggers across different minutes and hours to avoid the top-of-hour conge…
How to Run a Workflow on a Cron Schedule in GitHub ActionsTrigger a GitHub Actions workflow on a recurring timetable with on.schedule and a five-field POSIX cron expre…