Cronhub

cronhub.io

YES

Replaceable in one session with an AI coding agent.

Scheduled-job monitoring with a scheduler attached: it watches for the ping that should have arrived, and can also trigger jobs on a cron it runs itself.

Promptfree, for everyone, and the only version there is
Build me job monitoring and triggering that replaces Cronhub: something outside my infrastructure that notices a job did not run, and can start one that has no cron of its own.

STACK
- Node 20+ with Fastify
- SQLite through better-sqlite3, WAL mode
- A scheduler process separate from the web process
- Caddy in front, **on a machine that is not the one running your jobs**

THE DATA MODEL
- monitors: id, key, name, kind, schedule, timezone, grace_seconds, max_duration_ms, is_active, muted_until — kind is watch or trigger
- triggers: monitor_id, method, url, headers_json, body, timeout_ms, retry_json — for the ones this service starts
- pings, runs, states, incidents, alerts — the same shape as any absence monitor
- Every ping and every trigger attempt kept. When a job did not run, the record of what this service tried is the first thing you need

WATCHING
- A ping URL per monitor, with start, success and failure endpoints and a run id pairing a start with its finish
- Answer in milliseconds and record after responding. The ping must never slow a job or fail one — document a curl with a timeout and a fallback of true
- Compute the next expected instant from the schedule, add the grace period, and alert when it passes with no ping
- Both daylight-saving transitions decided, documented and tested
- The scheduler is small, separate, and has a dead-man's switch of its own pinging an external service, because a crashed watcher looks exactly like a quiet night

TRIGGERING, WHICH IS THE HALF THAT NEEDS CARE
- An HTTP request on a schedule, with a timeout, a retry policy and a recorded result
- **The endpoint being called must be idempotent, and the service must not assume it is.** A retry after a timeout may run the job twice, so send an idempotency key and say clearly in the README that the receiving side has to honour it
- Never retry a job whose result is unknown more than once without a deliberate setting. Doubling a nightly billing run is worse than skipping it
- Overlap protection: if the previous run has not reported finishing, skip or queue rather than starting a second, chosen per monitor
- The trigger signs its request so the receiving endpoint can verify it, and the secret is per monitor

BEYOND FAILING
- Alert when a job exceeds its maximum duration while it is still running
- Alert on a duration trend above the rolling 95th percentile, which is how a backup that has grown from four minutes to fifty is caught before it fails
- Flapping suppressed into one incident

ALERTS
- Email, webhook, chat and a shell command, with escalation after N minutes unacknowledged and acknowledgement from a link that needs no login
- Recovery always, in the same channel; muting always with an end time

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, SMTP_URL, SESSION_SECRET, HASH_SALT, DEADMAN_URL
- Migrations on boot, each once; nightly backup off the machine
- Health endpoint reporting the scheduler's last tick and the oldest overdue monitor

WHAT MATTERS MOST
The separate scheduler and the idempotency key. Deploy it somewhere unrelated to what it watches, then pull the plug on a job mid-run and confirm you are told — and that nothing was started twice.

What you lose

  • A scheduler running somewhere your jobs are not, which is where absence can be noticed
  • Triggering as well as watching, so a job can live on a machine with no cron at all
  • Alert routing already wired to the channels a team reads
  • Somebody else keeping the watcher running

If you would rather not build

  • A systemd timer plus a curl, if the job has a machine of its own

The escape hatch

open source · no votes, no paid placement

Healthchecks

$0

Open-source cron monitoring by absence, self-hostable.

healthchecks/healthchecksfree · open source

Uptime Kuma

$0

Self-hosted monitoring covering push, HTTP and TCP checks.

louislam/uptime-kumafree · open source

Why this verdict

our own opinion · changed only by a person

87/100

Verdict yes at 87: the same absence-monitoring shape, plus a trigger. The trigger is where the care goes, because a retry after a timeout can run a job twice.

History

tracked since 14 Aug 2026 · nothing is ever overwritten

Interest · last 30 days

Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.

Questions about Cronhub

answered from the record above

Is Cronhub free?

No — the plan we track is $8 a month. Hobby at $8/month billed monthly for a small number of monitors; a free tier covers a few.

Can you replace Cronhub by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 87 out of 100, build time one session. Read what you lose before you decide.

How much does Cronhub cost?

$8 a month on Hobby — $96 a year. Recorded 14 Aug 2026.

What do you lose by replacing Cronhub?

A scheduler running somewhere your jobs are not, which is where absence can be noticed; Triggering as well as watching, so a job can live on a machine with no cron at all; Alert routing already wired to the channels a team reads; Somebody else keeping the watcher running. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Cronhub?

Yes: Healthchecks, Uptime Kuma. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 16 in Monitoring & uptime

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc