Guide

How to monitor cron jobs (so they never fail silently)

Cron jobs fail quietly. The server reboots, a deploy drops the schedule, an exception is swallowed, the network flakes — and because cron does not report success or failure anywhere, the first sign of trouble is usually a customer email. This guide covers the two ways to monitor cron jobs and what a reliable setup looks like.

Why cron jobs fail silently

Standard cron has no concept of monitoring. It runs a command; whether that command succeeds, errors, or never starts, cron says nothing. The common failure modes all share one trait — they are invisible by default:

  • The host was down or restarting when the job was due, so it never ran.
  • A deploy or config change removed or broke the schedule.
  • The script threw an error that was logged to a file nobody reads.
  • The job hung on a slow network call and silently timed out.

Two ways to monitor: outbound checks vs heartbeats

There are two complementary approaches, and robust monitoring usually uses both.

Outbound checks: a monitor calls your endpoint on a schedule and records the status code, response body, and timing. This is ideal when the “job” is an HTTP endpoint you want triggered and verified.

Heartbeats (missed-run detection): your existing job pings a unique URL when it finishes successfully. If that ping does not arrive within the expected window, the monitor alerts you. This is the only approach that catches a job that never ran at all.

What good cron monitoring looks like

  • Missed-run detection — you are told when an expected run does not happen, not just when one errors.
  • A log of every run with status, output, and duration you can scan in seconds.
  • Alerting that reaches you where you already are (email, Slack).
  • Retries, so one transient blip does not wake you at 3am.
  • A short enough check interval to notice problems while they still matter.

Set it up in three steps

With Cronmint, monitoring an existing job is a one-line change — append a heartbeat ping to the end of the command so a successful run checks in:

crontab
# runs every hour; pings Cronmint only if backup.sh exits 0
0 * * * * /usr/local/bin/backup.sh && curl -fsS https://cronmint.com/ping/YOUR-TOKEN >/dev/null

Monitor your first cron job free

5 jobs free, no card. Set up your first monitor in about 30 seconds.

Start free

Frequently asked questions

How do I know if a cron job didn’t run?

Use heartbeat monitoring: your job pings a unique URL on success, and the monitor alerts you if that ping does not arrive within the expected interval. Plain error monitoring cannot detect a run that never happened.

What is a heartbeat monitor?

A heartbeat monitor watches for a periodic check-in (a “ping”). As long as pings arrive on schedule the job is healthy; a missing ping means a missed or failed run, and you get alerted.

What’s the free way to monitor cron jobs?

Cronmint’s free tier monitors up to 5 jobs with email alerts and no credit card. You add a single curl to your existing crontab line.

How often should the monitor check?

Match the check interval to how quickly a failure matters. Cronmint supports intervals down to 1 minute on Pro (5 minutes on free).