Guides/Fundamentals

How to Monitor Cron Jobs: The Complete Guide (2026)

Updated June 14, 2026 7 min read

Cron jobs are the invisible backbone of most systems: nightly backups, billing runs, report generation, cache warming, data syncs. They run unattended — which is exactly why a failure can go unnoticed for days. By the time someone realises the backup hasn’t run since last Tuesday, the damage is already done.

This guide explains why traditional monitoring misses these failures, the pattern that reliably catches them, and how to set up monitoring in a couple of minutes.

Why cron jobs fail silently

Most monitoring watches for something that is present — a server responding, CPU usage, an HTTP endpoint returning 200. Cron failures are the opposite problem: you need to be alerted about the absence of an event. If a job simply never runs, there is nothing to observe failing.

Common silent-failure causes include:

  • A syntax error in the crontab so the line never executes.
  • The server (or container) was down at the scheduled time.
  • The script exited early due to a missing dependency or environment variable.
  • A deploy wiped the crontab or changed the working directory.
  • The job ran but hung forever and never completed.

None of these throw an error anyone sees. The job just doesn’t happen.

The dead man’s switch pattern

The reliable way to monitor a scheduled task is to invert the logic: instead of watching the job, you expect a regular check-in from it. If the check-in does not arrive on time, you get alerted. This is called a dead man’s switch — silence triggers the alarm.

In practice, your job makes a small HTTP request to a unique URL each time it finishes successfully. A monitoring service knows the expected schedule and alerts you if a ping is missing.

The key insight: because the alert is driven by missing pings, it works even if the entire server is offline — a monitoring agent running on the same box would have died with it.

Setting it up in practice

Take a typical backup cron entry:

0 3 * * * /usr/local/bin/backup.sh

Add a ping at the end so it only fires when the script succeeds:

0 3 * * * /usr/local/bin/backup.sh && curl -fsS https://api.cronguard.dev/v1/ping/<your-uuid>

Now configure the monitor to expect a ping once a day with a grace period (say, 30 minutes). If 3:30am passes with no ping, you are alerted.

Signalling start, success and failure

For richer visibility you can ping a /start endpoint before the work and a /fail endpoint on error. This lets the monitor track execution time and tell a slow run apart from a crash:

#!/bin/bash
UUID=<your-uuid>
curl -fsS https://api.cronguard.dev/v1/ping/$UUID/start

if /usr/local/bin/backup.sh; then
  curl -fsS https://api.cronguard.dev/v1/ping/$UUID
else
  curl -fsS https://api.cronguard.dev/v1/ping/$UUID/fail
fi

What good alerts look like

Detecting the failure is half the job; the alert has to actually reach you. A failed 3am backup is worthless if the email sits unread until Monday. Effective alerting:

  • Reaches you on a channel you watch — SMS, WhatsApp, Slack or Telegram, not just email.
  • Fires fast, within minutes of the missed run.
  • Avoids noise — a sensible grace period prevents false alarms from a job that is simply a little late.
  • Tracks execution time, so you catch a job degrading from 20 minutes to 6 hours before it becomes an outage.

Monitoring cron jobs with CronGuard

CronGuard implements this pattern without anything to install. You create a monitor, drop the ping URL into your job, and get instant multi-channel alerts when a check-in is missed. It tracks execution time, shows real-time status, and offers public status pages. You can start free in under a minute — no credit card required.

Stop losing sleep over silent failures

CronGuard alerts you within minutes when a scheduled job fails to check in. No agent to install. Free to start.

Start Monitoring Free