A cron job that stops running reports nothing, so something has to notice the silence. There are two ways. A heartbeat tool such as Healthchecks.io expects a ping from every run. Or your monitoring counts the job's traces and alerts at zero. If the job already sends traces, the second has no ping to add.

Fixter (fixter.dev) does the second, and it is our product, so weigh this with that in mind. You hear when a job stops, and you fix it from your coding agent. It is not the right answer for every job, and below we say where a heartbeat wins. We checked every price on the vendor's own page on November 5, 2026.

What each approach catches

Error tracking sees the job that threw. It cannot see the job that never started, because nothing happened to report. That silent case is why cron job monitoring exists.

What went wrongError tracking aloneHeartbeat pingTrace count plus alert
Job never startsMisses itCatches itCatches it
Job crashes partwayCatches it, with the stack traceCatches it, with no reason whyCatches it, with the error
Job hangsMisses itCatches itCatches it
Job runs on a box with no telemetryMisses itCatches itMisses it
Job is fine, but telemetry brokeStays quietStays quietFalse alarm

How a heartbeat works, and six tools that do it

Your job calls the tool, not the other way round. You tell the tool how often to expect a ping, and it alerts you when one is late.2 Setup is one line at the end of the job.3

crontab
# crontab: the ping only runs if backup.sh exits 0
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 5 -o /dev/null https://hc-ping.com/your-uuid-here

It works from anything that can make an HTTP request. The catch: you add a line and a monitor for every job, and a ping says a run finished, not why it did not.

ToolFreePaid fromWorth knowing
Healthchecks.io20 jobs$20 a month for 100 jobsDoes this one thing
Cronitor5 monitors$2 per monitor plus $5 per user a monthNo base fee
Better Stack10 monitors and heartbeats, shared$29 per responder a month, billed yearlyComes with logs, errors, uptime and on-call
Sentry1 cron monitor$0.78 per extra monitor, on Team from $26 a monthHandy if you already use Sentry
Checkly10 uptime monitors, shared$24 a month for 50 uptime monitorsHeartbeats count as uptime monitors
UptimeRobotNot on the free plan€9 a month, billed yearly, for 10 monitorsHeartbeats start at Solo

Lowest list price in each vendor's currency on November 5, 2026. Sources: Healthchecks.io,1 Cronitor,4 Better Stack,5 Sentry,6 Checkly,7 UptimeRobot.8

How to monitor a job without a heartbeat

If a job sends a trace, your monitoring has a record of every run, and a missed run is a count that falls to zero. No ping URL, no separate monitor. Here is how that works in Fixter. Other tools can do it too, if they read an empty window as zero.

1. Make the job send a trace

Fixter takes standard OpenTelemetry.9 For a plain script, wrap the work in one span.10

Python
# nightly_invoices.py
from opentelemetry import trace

tracer = trace.get_tracer("nightly-invoices")

with tracer.start_as_current_span("nightly-invoices"):
    send_invoices()

# Flush before exit, or a good run looks like a missed one.
trace.get_tracer_provider().shutdown()

The last line matters. A short job can exit before its trace is sent,11 and a job that ran then looks like a job that stopped.

2. Ask your coding agent for the alert

Say what you want: "Alert me if nightly-invoices has not run for 26 hours." Make the window a little longer than the schedule. When a run is missed, you hear by email or in Slack.12

When a job runs and fails, you get more than a heartbeat can give you: the error and its stack trace, ready to fix from your coding agent.13 More in how to connect Claude Code to your logs.

When a whole service goes silent

Fixter also raises an issue on its own, with no rule, when a service stops reporting.14 It works per service, not per job, so one dead job inside a busy service still needs its own alert.

Silence also has more than one cause. On our own account in October, a "Stopped reporting" issue pointed at the collector refusing data under memory pressure, with the service itself probably still running. A real problem, just not the one the alert seemed to describe.

Which should you use?

A job inside a backend you already monitor, or plan to, gets a trace and an alert, because the same data also tells you why it failed. Use a heartbeat when:

  • The job sends no telemetry. A backup script on a VM, a shell one-liner. One curl line is far less work.
  • The job runs weekly or monthly. A heartbeat with a monthly period is simple. A window that long is not.
  • You cannot miss this job. A heartbeat is a second path that keeps working when telemetry does not. For a database backup, run both.
  • You want the alert on your phone. Fixter alerts by email and Slack.12 Healthchecks.io's Business plans include SMS and phone call credits,1 and Better Stack has phone and SMS alerts.5
  • Cron is all you need. Healthchecks.io does this and little else.
  • You are already on Sentry or Better Stack. Use their cron monitors or heartbeats. Adding a tool for this is not worth it.

No monitoring yet? Pick one tool that covers errors, logs and traces, and let it cover the jobs too. See the best monitoring tools for a small SaaS.

Fixter finds and fixes the issues in your app in production, from your coding agent: errors, failing infrastructure, slow requests and downtime. It finds the root cause and fixes it: in your agent over MCP, or as a pull request ready for your review. Nothing to learn, built for small teams.

To set it up, paste this into your coding agent: "Read fixter.dev/llms.txt and set up Fixter." The manual path is four environment variables and standard OpenTelemetry.9 Free plan, paid from €20 a month.15 For the app and database themselves, see how do I know when my app or database goes down.

Key takeaways

  • A job that never starts throws no error, so error tracking alone cannot see it
  • A heartbeat is one line per job and works anywhere; Healthchecks.io's free plan covers 20 jobs
  • A job that sends traces needs no ping: alert when its count falls to zero
  • Use a heartbeat for jobs with no telemetry, monthly jobs, and the backup you cannot lose

Frequently asked questions

What is cron job monitoring?

It tells you when a scheduled job did not run, ran late, or failed. A job that never starts throws no error and writes no log line, so error tracking cannot see it. The monitor has to expect a signal from each run and alert you when it does not arrive.

How do I get alerted when a cron job does not run?

Two ways. Add a heartbeat: the job calls a unique URL on each run, and a tool such as Healthchecks.io, Cronitor or Better Stack alerts you when the call is late. Or, if the job already sends traces, alert when its trace count falls to zero over a window longer than its schedule.

What is a heartbeat, or dead man's switch, for cron jobs?

A check that works in reverse. Your job calls the tool on each run, instead of the tool calling your service. If no call arrives on time, the tool alerts you. It works even when the job's host has no monitoring at all.

What is the best free cron job monitoring tool?

For heartbeats alone, Healthchecks.io has the largest free allowance of the tools we checked: 20 jobs. Better Stack's free plan shares 10 monitors and heartbeats, Checkly's shares 10 uptime monitors, Cronitor's has 5 monitors, and every Sentry plan includes 1 cron monitor.

Can I monitor a cron job without a heartbeat?

Yes, if the job sends traces. Alert when its trace count falls to zero over a window longer than the schedule. Fixter (fixter.dev) works this way. It does not work for a job that sends no telemetry; use a heartbeat there.

Does error tracking catch a cron job that did not run?

No. Error tracking reports errors that happened. A job removed from the crontab, or a scheduler that died, produces nothing to report. It does catch a job that started and threw an exception, so it covers part of the problem and misses the silent part.

Sources (15), all checked November 5, 2026
  1. Healthchecks.io pricing
  2. Healthchecks.io docs, configuring checks
  3. Healthchecks.io docs, shell scripts
  4. Cronitor pricing
  5. Better Stack pricing
  6. Sentry docs, pricing
  7. Checkly pricing
  8. UptimeRobot pricing
  9. Fixter docs, send data with OpenTelemetry
  10. OpenTelemetry docs, Python instrumentation
  11. OpenTelemetry specification, Trace SDK
  12. Fixter docs, alerts
  13. Fixter docs, issues
  14. Fixter docs, MCP tools reference
  15. Fixter pricing