How to Monitor Cron Jobs: The Complete Guide (2026)
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.
Setting it up in practice
Take a typical backup cron entry:
0 3 * * * /usr/local/bin/backup.shAdd 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
fiWhat 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