DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
World desk5 min

How to Make GitHub Actions Cron Jobs Safe to Rerun After a Missed Schedule

GitHub Actions schedules can be delayed or dropped, and missed periods are not replayed automatically. Use durable period keys, idempotent processing, and bounded manual backfills to recover safely.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • 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.

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.

  1. Determine the period or cursor that should be processed.
  2. 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.
  3. Perform the work using that same key as a downstream idempotency key when the receiving service supports one.
  4. 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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Illustrative 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.

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.Support on Ko-Fi

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.

Run a recovery check when a schedule appears missing

  1. 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.
  2. 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.
  3. 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.
  4. For a missing period, start a bounded dispatch backfill or let reconciliation scan due-but-incomplete periods.
  5. Verify completion in both the durable ledger and the downstream system before treating recovery as complete.
  6. 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.