---
title: Cron Job Monitoring & Missed-Run Alerts
description: Cron job monitoring: add one curl line to a crontab entry and get alerted when the job misses its schedule, exits non-zero or runs too long. Free plan.
canonical: https://watchfor.io/cron-job-monitoring
---

# Cron Job Monitoring: Know the Night Your Backup Doesn't Run

When a cron job stops, cron says nothing. Give WatchFor the job's schedule, add one curl line, and the first missed run opens an incident that night.

[Get started for free](/auth/sign-up)[View pricing](/pricing)

## Built Around the Cron Schedule

The monitor knows when each run is due, so it can tell a late job from a missing one

### Your Crontab's Cron Expression

Enter the same 5-field expression the crontab uses. 0 3 * * * means a ping is due after 03:00 every night, not at some point within 24 hours. Lists, ranges, steps and JAN–DEC / SUN–SAT names are accepted.

### Evaluated in Your Timezone

Pick an IANA timezone such as Europe/Vilnius or America/New_York. Each run time is computed in that zone, daylight saving changes included, so a 03:00 job is expected at 03:00 local time, not 03:00 UTC.

### Grace for Variable Runtimes

A backup that takes 10 to 40 minutes needs room before anyone is paged. Grace can be 0 seconds to 30 days; the run counts as missed only when the scheduled time plus grace passes without a ping.

### Rejected Before It Can Misfire

Expressions are validated when you save, with the scheduler's own rules. @daily, a sixth seconds field and 7 for Sunday are rejected with a message naming the field, so nothing is saved that would quietly run on a different schedule.

### Exit Codes

End the line with ; curl -fsS <url>/$? and the job's exit code travels with the ping. A non-zero code raises Run Failed with the code in the incident, which is a different alert from Missed Schedule.

### Run Duration Over Time

Ping /start before the job and finish after it, and each run is measured. Watch the nightly dump grow from 4 to 40 minutes over a quarter, and set the Run Duration rule before it runs into business hours.

### The Job's Output in the Incident

POST the job's stdout and stderr with the ping and up to 10 KB is stored with that run. When pg_dump fails, its error message is already in the Pings tab.

### Healthchecks-Style Ping URLs

The /start, /fail and /<exit-code> suffixes and ?rid= behave the way Healthchecks scripts expect. Switching a job over means replacing the old ping base URL with your WatchFor ping URL.

## A closer look

Paste the line from your crontab, pick its timezone and set a grace period.

Start and finish pings every 10 minutes, run durations and missed runs.

Alert when a run fails or takes over 10 minutes, not only when it's missed.

## Why Monitor Cron Jobs at All?

Cron runs the jobs whose silent failure costs the most: backups, billing exports, certificate renewals, retention cleanups. When one stops, nothing breaks right away, so nobody looks until the backup, the invoice or the certificate is needed. A cron job monitor checks every scheduled run against the schedule and alerts on the first one that does not report in. Each monitored job counts as one regular monitor, and cron job monitors are included on the Free plan.

[Start monitoring now](/auth/sign-up)

A missed run alerts at its scheduled time plus grace, the same night

One line per crontab entry: && curl -fsS <your-ping-url> after the job

Standard 5-field cron expressions in the timezone you choose, DST included

Missed Schedule, Run Failed and Run Duration are separate alerts

Up to 10 KB of job output stored with each run

Works with crontab, systemd timers, Kubernetes CronJobs and Windows Task Scheduler

The next ping resolves a missed-schedule incident

Counts as one regular monitor, Free plan included

## How Cron Job Monitoring Works

Your crontab makes one extra request per run

1

### Copy the Schedule

Pick the Cron job card and enter the crontab's expression (for example 0 3 * * *), its timezone and a grace period that covers the job's normal runtime.

2

### Chain the Ping

Append the ping to the job: /usr/local/bin/backup.sh && curl -fsS <your-url>. With &&, the ping is sent only when the job succeeded, so a failure shows up as a missed run.

3

### Every Run Is Checked

After each ping, the deadline moves to the next scheduled time plus grace. A ping before then is on time, a failure ping raises Run Failed, and no ping raises Missed Schedule.

4

### Alert, Read the Output, Resolve

The first missed run opens a critical incident on your usual channels and on-call, with the expected schedule and any output the last run sent. The next ping resolves it.

## Cron Jobs Worth Watching

Anything on a schedule can stop without telling you

### Database Backups

pg_dump or mysqldump at 03:00, found broken only during a restore. With the exit code and output in the ping, a failed dump is an incident at 03:05 with the error message attached.

### Billing, Reports and Exports

Invoice runs, end-of-day settlement, warehouse exports: jobs whose absence costs money or breaks compliance. One monitor per job means ops hears about a skipped run that night instead of finance on Friday.

### Certificate and Credential Renewals

certbot renew, key rotation, token refresh. When a renewal job dies, everything keeps working until the expiry date. A cron monitor flags the dead job on its first missed run, weeks before the certificate expires.

### Cleanups and Retention Jobs

Log rotation, temp-file purges, data retention deletes. When they stop, disks fill and retention policies are quietly broken. A weekly expression with a day of grace keeps them in check without noise.

## Frequently asked questions

Everything you need to know about cron job monitoring

[All questions→](/faq)[Ask us directly](/contact)

What is cron job monitoring? Cron job monitoring checks that scheduled jobs run when they should. Your job pings a unique URL when it finishes. WatchFor knows the schedule (a cron expression and its timezone) and opens an incident when no ping arrives by the scheduled time plus grace, or when the job reports a failure or runs too long. It catches the failure cron itself never reports: the job not running at all.

How do I add monitoring to an existing crontab entry?

Does it understand my job's actual schedule?

What happens if the job runs but fails?

Can I see why a run failed without logging into the server?

How fast will I know a job was missed?

Does this work outside classic cron?

Can I get alerted when a job runs too long?

Can I import cron monitors from another tool?

What does cron monitoring cost?

## From our blog

Guides, deep-dives, and best practices from the WatchFor team

[Monitoring

### Six scheduled jobs that will eventually burn you — and the exact check-in for each

Aug 23, 2026·5 min readRead article](/blog/cron-monitoring-recipes)[Monitoring

### Heartbeat & Cron Job Monitoring: the Dead Man's Switch Your Backups Deserve

Jul 30, 2026·6 min readRead article](/blog/heartbeat-cron-monitoring)[Monitoring

### API Monitoring Guide: how to watch the endpoints your business runs on

Jun 03, 2026·4 min readRead article](/blog/api-monitoring-guide)

## Stop Finding Out at Restore Time

Every crontab has a job that matters more than it looks. Give it a cron job monitor and one curl line, and the next skipped run is an incident that night. Start on the Free plan, no credit card required.

[Get started for free](/auth/sign-up)[View documentation](/docs/monitors/heartbeat)

---

Canonical page: https://watchfor.io/cron-job-monitoring · Site guide: https://watchfor.io/llms.txt
