Find out when a cron job stops running
Cron sends no alert when a job fails to start, crashes or hangs. With a heartbeat monitor, your job pings a URL after each run. When a ping is late, Uptrack alerts you by email, Slack, Discord, Telegram or webhook.
Heartbeat monitors need a paid plan, from $3/mo · 30-day money-back guarantee on paid plans
How a heartbeat monitor works
The job reports in, so the monitor can tell when it stops. This also catches the case where the whole server is down, because no ping arrives. There is no agent to install.
- 1
Create a heartbeat monitor
Pick "Heartbeat / Cron" as the monitor type. Uptrack gives the monitor a unique ping URL.
- 2
Add the ping to your job
Call the URL when the job finishes. Use && so the ping goes out only after the job succeeded.
- 3
Send one ping by hand
The monitor starts to watch after its first ping. Run the curl command once to start it.
A crontab line. The ping runs only if the backup script exits with 0:
0 2 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 -o /dev/null https://api.uptrack.app/api/heartbeat/YOUR_TOKENA POST with the optional fields. A GET takes the same fields as query parameters:
curl -fsS -X POST -H 'Content-Type: application/json' \
-d '{"status":"ok","message":"backup finished"}' \
https://api.uptrack.app/api/heartbeat/YOUR_TOKENCopy the exact URL from the page of your monitor. It has the token of that monitor in place of YOUR_TOKEN.
When Uptrack alerts you
Uptrack alerts when the last ping is older than the expected interval plus the grace period. The timer starts at the last ping, not at the time on your schedule. Uptrack looks for late pings once a minute.
| Setting | Default | What it does |
|---|---|---|
| expected_interval_seconds | 3600 (1 hour) | How often a ping should arrive. |
| grace_period_seconds | 300 (5 minutes) | Extra time before Uptrack counts the ping as missed. |
Example: a nightly job takes up to 20 minutes. Set the interval to 86400 seconds and the grace period to 1800 seconds. You hear about it when no ping arrives within 24 hours and 30 minutes of the last one.
- One late job opens one incident. You do not get a new alert every minute.
- The next ping closes the incident by itself.
- A paused monitor sends no alert, and a monitor with no ping yet sends none either.
What you can watch
Anything that runs on a schedule and can send one HTTP request when it is done.
Database backups
A nightly pg_dump or mysqldump that did not run leaves you with no recent backup.
Data pipelines
A broken import or export shows up as stale dashboards, often days later.
Queue workers
A worker can ping from a timer inside its loop, so a stalled worker goes quiet and you hear about it.
Scheduled reports and billing
A weekly email or a monthly billing run that is skipped is easy to miss.
Heartbeat monitoring is not for you if
- You need to know why a job failed. Uptrack sees a ping or no ping. It does not read exit codes, logs or job output.
- You need a start signal, to tell a job that never started from one that hangs. Heartbeat monitors have the one ping only.
- You only need cron monitoring and nothing else. Dedicated tools such as Healthchecks.io and Cronitor are built for it. Better Stack lists 10 heartbeats on its free plan (checked 2026-10-12).
- You need heartbeat monitors without paying. They need a paid plan, from $3/mo.
See how Uptrack compares with Healthchecks.io and Cronitor.
Frequently asked questions
What is cron job monitoring?
Cron job monitoring tells you when a scheduled job did not run. The job sends a small request, called a heartbeat or ping, after each successful run. The monitor expects that ping on a schedule. When a ping is late, you get an alert.
Does cron job monitoring work on every plan?
No. Heartbeat monitors need a paid plan. Paid plans start at $3/mo and have a 30-day money-back guarantee. Heartbeat monitors count against the monitor limit of your plan and have no extra fee.
How late can a ping be before Uptrack alerts me?
A new heartbeat monitor expects a ping every 1 hour (3600 seconds) with a grace period of 5 minutes (300 seconds). Uptrack alerts when the last ping is older than the interval plus the grace period. It looks for late pings once a minute. To change the two values, send expected_interval_seconds and grace_period_seconds in the settings when you create the monitor with the API.
What happens if the job runs but fails?
Uptrack only knows whether a ping arrived. It does not read the exit code or the logs of your job. Send the ping only after the real work succeeded, for example with && in a shell script. A failed job then sends no ping and the monitor alerts.
Will I get an alert for a monitor that never received a ping?
No. A heartbeat monitor starts to watch after its first ping. Send one ping when you set the job up, for example by running the curl command by hand.
Which requests does the ping URL accept?
GET, POST and HEAD. A POST can carry a JSON body with the optional fields execution_time, status and message. A GET can carry the same fields as query parameters. An unknown token returns 404.
Is the ping URL a secret?
Yes. The token in the URL is the only credential, so anyone who has the URL can send a ping and keep the monitor quiet. Keep it out of public repositories and logs.
Watch your first cron job
Heartbeat monitors share the monitor limit of your plan, with no extra fee. Read the heartbeat monitoring feature page, or see free uptime monitoring for websites and APIs.
from $3/mo · 30-day money-back guarantee on paid plans