Tell Me When Down
How it worksWhat we checkPricing
BlogFree toolsCompareDocs
Log inGet started
All posts
When cron fails silently

Why your GitHub Actions scheduled workflow stopped running

July 18, 2026·5 min read
An ornate pocket watch in low light — a scheduled workflow silently switched off after weeks of running.

Your scheduled workflow ran like clockwork for weeks, then just stopped. No error, no failed run, no email. It didn't break — GitHub disabled it, on purpose, and the only place it says so is a banner you never looked at.

This is one of the most common ways a cron quietly dies, and it catches exactly the projects that rely on it most: the quiet side project that does one scheduled job and nothing else.

The 60-day rule

GitHub automatically disables schedule-triggered workflows after 60 days of no activity in the repository. "Activity" means commits, pushes, and the like — not the workflow's own scheduled runs. So a repo whose only heartbeat is the cron itself will always trip this: the cron running doesn't count as activity, so the clock keeps ticking until GitHub switches it off.

60 days
of no repo activity, then scheduled workflows auto-disable
public repos
where this auto-disable rule applies
not counted
the workflow's own scheduled runs don't reset the clock
off by default
scheduled workflows don't run on forks
The workflow running is not repo activity. That's the whole trap: the more reliably your cron does its one job and nothing else, the more certainly it gets disabled at the 60-day mark.

The other silent zero: forks

If you forked a repo expecting its scheduled workflow to run for you, it won't. Scheduled workflows are disabled by default on forks and have to be explicitly enabled in the Actions tab. Plenty of "the cron isn't running" reports are just a fork that was never switched on.

Turning it back on — and keeping it on

Re-enabling is a click: open the workflow in the Actions tab and enable it. But it'll disable again in another 60 idle days unless the repo sees real activity. The common workaround is a second tiny scheduled workflow that makes a trivial commit on a slow cadence, resetting the clock so your real cron survives:

paste into Claude or ChatGPT
My GitHub Actions scheduled workflow keeps getting disabled after a couple of months because the repo has no other activity. Write me a second, tiny scheduled workflow whose only job is to keep the repo "active" so my real scheduled workflows don't get auto-disabled.

Requirements:
- Run on a schedule roughly weekly, plus workflow_dispatch.
- Make a trivial commit to a throwaway file (e.g. touch a timestamp file and commit it) using the built-in GITHUB_TOKEN, so the repo shows recent activity.
- Add a comment explaining that GitHub disables scheduled workflows after 60 days of no repository activity on public repos, and that this "keepalive" commit resets that clock.
- Keep it minimal and safe — no force pushes, no touching real files.

Give me the full workflow file.

The fix that survives GitHub turning it off

A keepalive commit patches this one cause, but it can't catch the others — a broken run, a rotated secret, a downstream API that started failing. All of them share the same symptom: the job stops and nobody's told. GitHub schedules your workflow; it doesn't judge whether the work got done.

The durable answer is a heartbeat: have the job report success on every run, and get alerted the moment a report goes missing — whether the cause was a disabled workflow, a 500, or a run that never fired.

Know when the cron stops — even when GitHub is the one that stopped it.

Join Tell Me When Down free and add one heartbeat ping to your workflow. If GitHub disables it, a run fails, or it silently never fires, you get an email in minutes instead of discovering it 60 days later.

Watch my cron jobfree · no card required
more on when cron fails silently
How do I know if my cron job actually ran?"It ran" hides four different outcomes and only one is good. Why logs and error emails miss the worst case, and how a success heartbeat catches a job that never fired at all.Why your Vercel cron job is not runningOn Vercel it's rarely a mystery: the Hobby once-a-day cap, jobs that fire within the hour not on the minute, a CRON_SECRET that 401s your own cron, or a schedule that only runs in production.Why your Supabase pg_cron job isn't runningA pg_cron job that never runs is usually a missing pg_net extension, a UTC-not-local schedule, or a run that fired and failed. Here's how to read the run log Postgres keeps and find which is yours.What a dead man's switch is (and when your app needs one)Most monitoring watches for something bad happening. A dead man's switch watches for something good not happening — the right tool for backups and cron jobs that fail silently. What it is, and when you need one.

spot something wrong or out of date? [email protected] — we'll fix it

Tell Me When Down

Uptime and security monitoring for people who'd rather ship than babysit servers. We watch so you can sleep.

product
How it worksWhat we checkPricingDocsBlogFAQ
free toolsWebsite security scanSupabase pause checkRender sleep checkMixed content checkerSecurity headers checkCookie security checkSSL expiry check
comparevs UptimeRobotvs Better Stackvs PingdomFor indie hackers
company
StatusAbout our botSupportPrivacyTerms
© 2026 TellMeWhenDown · tellmewhendown.com