Free tools Windows power users keep installed
One-click scans. No signup required.
GitHub Actions does not guarantee that every scheduled workflow starts on time, or automatically replay a schedule it missed. The safe recovery pattern is to identify work by its intended period, track completion durably, make side effects idempotent or resumable, and provide a bounded manual backfill. That way, a delayed, failed, or manually repeated run can reconcile the right work without duplicating effects or silently skipping a period.
Why a GitHub Actions scheduled workflow can be missed
GitHub documents that scheduled events can be delayed during periods of high load and that queued jobs can be dropped when load is high enough. The start of each hour is a particularly busy time; choosing a different minute may reduce delays, but it cannot guarantee delivery. See GitHub’s schedule event documentation.
As an Amazon Associate I earn from qualifying purchases.
A schedule is not a catch-up queue. If GitHub does not create a run for a scheduled time, there is no existing run to rerun. Scheduled workflows also have configuration and repository-state requirements that can explain an apparent gap:
- The workflow file must be on the default branch, and scheduled runs use that branch’s latest commit.
- Schedule times are UTC by default. A schedule can specify an IANA time zone; daylight-saving transitions can affect when a local scheduled time runs.
- The documented minimum schedule interval is once every five minutes.
- In public repositories, scheduled workflows can be disabled automatically after 60 days without repository activity. Scheduled workflows in public forks are disabled by default.
Check the relevant details in GitHub’s schedule event documentation and its workflow enablement documentation. These behaviors mean a cron expression alone cannot provide exactly-once processing or reliable recovery.
#1 Best Overall
Make each period of work identifiable
Separate the question “What work is due?” from “When did GitHub start this run?” Give each logical unit a durable business key: for example, a calendar date, billing period, data partition, or upstream cursor. Record completion for that key in a database or another durable system that owns the work.
- Determine the period or cursor that should be processed.
- Check whether its key is already complete. If multiple runs could overlap, claim or lock the key so they cannot both perform the same work concurrently.
- Perform the work using that same key as a downstream idempotency key when the receiving service supports one.
- Record completion only after the associated effects have committed.
Do not use a workflow run ID or run_attempt as the idempotency key. A retry of the same business period has a different run attempt, but should converge on the same logical work key.
Rank #2
Account for partial completion
A process can make an external change and then stop before updating its completion ledger. In that case, the ledger alone cannot prove whether the effect happened. Reconcile against the external system, or use a transactional or outbox-style design suited to the systems involved. These safeguards are application design choices; GitHub’s schedule event does not supply period accounting or side-effect deduplication.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchChoose the right recovery path
First distinguish a missing run from an existing failed or partial run. The recovery options differ:
| Situation | Recovery approach | Key consideration |
|---|---|---|
| An existing run failed or stopped partway through | Rerun all jobs, failed jobs, or a specific job from that run. | Choose the scope based on which steps are safe to repeat and whether prior side effects are idempotent. |
| No run exists for the intended period | Start a configured workflow_dispatch backfill with explicit period or cursor inputs, or run automatic reconciliation of due-but-incomplete periods. |
Dispatch starts a workflow; your application must decide which periods remain outstanding and prevent duplicate effects. |
For an existing run, GitHub allows reruns for up to 30 days after the initial run and limits a run to 50 reruns. A rerun retains the original GITHUB_SHA and GITHUB_REF and uses the original triggering actor’s privileges. It does not create a run for a scheduled period that never had one. See GitHub’s rerun documentation.
Provide a bounded manual backfill
Add workflow_dispatch when operators need to recover a specific missing period. GitHub supports starting a dispatched workflow through the UI, CLI, or REST API. The workflow must be configured for dispatch, and the workflow file must be on the default branch. For the REST endpoint, fine-grained tokens require Actions repository write permission. See GitHub’s workflow_dispatch documentation.
Use explicit, reviewable inputs such as a start and end period or a cursor. Validate the range before processing it, and have dispatch call the same period-keyed processing logic as the regular schedule. Avoid making a manual run impersonate a cron timestamp or defaulting it to “process the latest period”; both approaches can select the wrong work.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsIllustrative workflow shape
This example shows the separation between a schedule trigger and a bounded manual backfill. It is a structural illustration, not tested copy-and-paste code. Implement period validation and idempotent processing in the repository, and verify current queueing and time-zone syntax against GitHub’s workflow syntax documentation. A scheduled invocation may also need different input handling from a manual dispatch.
Best Value
name: Process periods
on:
schedule:
- cron: '17 * * * *'
workflow_dispatch:
inputs:
start_period:
description: First period to reconcile
required: true
type: string
end_period:
description: Last period to reconcile
required: true
type: string
concurrency:
group: process-periods
queue: max
jobs:
process:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Reconcile due periods
run: ./scripts/process-periods
env:
START_PERIOD: ${{ inputs.start_period }}
END_PERIOD: ${{ inputs.end_period }}
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Set concurrency to match the work
GitHub Actions allows workflow runs to execute concurrently by default. A concurrency group normally permits one running entity and one pending run; when another run becomes pending, it cancels the older pending run. That is suitable only when dropping an older pending run is acceptable—for example, when rebuilding a cache from the latest source state.
If each period has a distinct effect, such as one report or settlement per day, do not rely on that default pending-run behavior. Use the documented queueing option when every queued period must be processed, or serialize period claims in durable storage. Queueing and concurrency settings control runs; they do not replace business-key deduplication. See GitHub’s concurrency documentation.
Quick Recap
Run a recovery check when a schedule appears missing
- Open the repository’s Actions page and check that the workflow is enabled. Confirm that its file is on the default branch and that its
on:configuration includes the intended schedule. For a public repository, check whether inactivity disabled it. - Inspect run history around the expected period. If a run exists but failed or stopped partway through, decide whether to rerun all jobs, failed jobs, or a specific job. If no run exists, rerunning is not an option for that period.
- Check the durable completion ledger and the system that receives the side effects. A green workflow status alone does not prove that every external effect occurred, and a failed status alone does not prove that none occurred.
- For a missing period, start a bounded dispatch backfill or let reconciliation scan due-but-incomplete periods.
- Verify completion in both the durable ledger and the downstream system before treating recovery as complete.
- Move the cron minute away from the start of the hour to reduce load-related delay risk, while keeping reconciliation in place.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →




