Skip to content
UptimePilot

Cron job monitoring that notices when a job goes quiet

A scheduled job that stops running does not throw an error anyone sees. It just does nothing, night after night. UptimePilot gives each job a unique ping URL, knows when the job should report in, and alerts you when the ping does not arrive on time, or when a job starts and never finishes.

Run an uptime check

The check passes when this exact text appears on the page.

No card required to run a check. Your monitor data stays yours.

See pricing
Empty railway station hall with a large analog clock, steel roof trusses and morning light

Heartbeat monitors for jobs that run on a schedule

A normal check asks your server a question from outside. A heartbeat monitor works the other way round. Your job calls its URL each time it runs, and UptimePilot watches the clock. If the call is late by more than the grace period, the monitor goes down and the alert goes out on email, SMS, Slack, Microsoft Teams or webhook, with escalation if nobody acknowledges it.

This catches every way a job can fail silently.

  • The cron daemon stopped, or the server was rebuilt and the crontab was not copied.
  • The job crashes early because of a changed password, a full disk or a missing dependency.
  • A deploy changed the path of the script and cron keeps calling a file that is gone.
  • The job runs but takes so long that it overlaps with the next run, or never ends.
  • The worker process died and the supervisor did not bring it back.

How cron job monitoring works on UptimePilot

Setting up a heartbeat takes three decisions.

  • Unique ping URL. UptimePilot creates a URL for the monitor. Anyone who knows it can mark the job as alive, so treat it like a token and keep it out of public repositories.
  • Expected schedule. Either a simple period (every 5 minutes, every hour, every 24 hours) or a cron expression such as 0 2 * * * with your time zone, so UptimePilot knows a 2:00 job should report by 2:00 in that zone.
  • Grace period. How long past the expected time UptimePilot waits before alerting. Set it longer than the normal run time. A backup that takes 40 minutes needs a grace period of about an hour; a job every 5 minutes is fine with 2 or 3.

Every ping is stored with its time, so you see the run history and the gaps in it.

Start and finish pings to catch hung jobs

A single ping at the end tells you the job finished. It does not tell you that a job started at 2:00 and is still stuck at 6:00 waiting on a lock. For long jobs, send a start ping when the job begins and a finish ping when it ends. UptimePilot measures the run duration, alerts if the finish ping does not arrive within the maximum run time you set, and shows duration trends, so a backup that grows from 20 to 90 minutes over a quarter is visible before it misses its window. A job can also send a fail ping when it exits with an error, which alerts at once instead of waiting for the grace period.

Add a heartbeat to an existing crontab

The change is one curl call after your command. The && makes sure the ping is sent only when the job succeeds. The short timeout and retry keep a network blip from turning into a missed ping.

# nightly database backup at 02:00, success ping only
0 2 * * * /usr/local/bin/backup-db.sh && curl -fsS -m 10 --retry 3 https://uptimepilot.com/ping/YOUR-MONITOR-ID > /dev/null

# long import with start and finish pings
30 3 * * * curl -fsS -m 10 https://uptimepilot.com/ping/YOUR-MONITOR-ID/start > /dev/null; /usr/local/bin/import.sh && curl -fsS -m 10 --retry 3 https://uptimepilot.com/ping/YOUR-MONITOR-ID > /dev/null || curl -fsS -m 10 https://uptimepilot.com/ping/YOUR-MONITOR-ID/fail > /dev/null

The same call works from scheduled tasks on Windows, from a scheduler inside your application, from a CI pipeline or from any language that can send an HTTP request.

Which jobs to monitor first

Start with the jobs whose silent failure costs the most, and that someone would discover only weeks later.

  • Backups. The classic case. A backup that stopped three weeks ago is found on the day you need to restore.
  • Queue workers. Send a ping every few minutes from the worker loop. If the worker dies, emails, exports and webhooks pile up without any error.
  • Nightly imports and syncs. Product feeds, price updates, CRM syncs. A failed import means stale data on the site the next morning.
  • Billing jobs. Renewals, invoices and dunning runs. A missed run is missed revenue and confused customers.
  • Certificate renewal and cleanup tasks. Renewal jobs that fail quietly are behind many expired certificates; pair them with ssl certificate monitoring.
  • Reports and exports that clients expect on a fixed day.

Heartbeats next to the rest of your monitoring

Heartbeat monitors sit in the same groups, alert rules and maintenance windows as your other checks. Combine them with server monitoring tools for ping and ports, with website monitoring for the pages those jobs feed, and with website downtime tracker routing and escalation. A failed heartbeat appears in the incident log and in reports like any outage.

Which plan fits your scheduled jobs

Heartbeat monitors are included in every plan, on top of the regular monitors.

  • Starter, $49 a month or $24 a month billed yearly. 10 heartbeat monitors and 50 monitors.
  • Team, $99 a month or $49 a month billed yearly. 50 heartbeat monitors and 200 monitors.
  • Business, $249 a month or $124 a month billed yearly. 250 heartbeat monitors and 1,000 monitors, REST API to create heartbeats from your deploy scripts.
  • Enterprise, $599 a month or $299 a month billed yearly. 1,000 heartbeat monitors and 3,000 monitors, audit log and SSO (SAML).

Yearly billing saves 50 percent. All limits are on uptime monitoring pricing.

01

What happens if UptimePilot cannot be reached when my job pings?

The curl call in the example retries a few times with a short timeout, and the grace period absorbs short delays. Your job itself is not affected, because the ping runs after the command.

02

Can I use cron expressions and time zones?

Yes. Use a simple period or a cron expression with a time zone, so jobs at fixed local times and across daylight saving changes are checked correctly.

03

How do I catch a job that hangs instead of failing?

Send a start ping and a finish ping, and set a maximum run time. If the finish ping does not arrive in time, UptimePilot alerts.

04

Do heartbeat monitors count against my regular monitors?

No. Heartbeat monitors have their own limit per plan, from 10 on Starter to 1,000 on Enterprise.

05

Can I pause heartbeat alerts during maintenance?

Yes. Maintenance windows apply to heartbeat monitors like any other check, once or on a repeating schedule.

Never find a dead backup on restore day

Create a heartbeat, add one curl call to your crontab, and know the next morning that every job ran.