Heartbeats

The backup did not fail. It stopped running.

A job that crashes writes something to a log. A job that is no longer scheduled writes nothing, and nothing is what every monitoring tool you own is watching for. You find out weeks later, on the day you reach for the backup.

Heartbeats are on the Solo plan and above. See the plans.

How do you get alerted when a cron job stops running?

Give the job a URL to call when it finishes, and a deadline. Silence past the deadline is the alert. That inverts the problem: instead of watching for an error that will never be written, you watch for a check-in that does not arrive.

A URL a job calls each time it finishes. Silence past the deadline raises an alert. Nothing else about the job changes, and the job needs no library, no agent and no outbound firewall rule beyond one HTTPS request.

crontab
0 3 * * *  /usr/local/bin/backup.sh && \  curl -fsS https://acciti.com/v1/heartbeats/$HEARTBEAT_TOKEN/ping

The && is the whole design. Ping only when the job actually succeeded, or you are monitoring whether cron ran rather than whether the backup worked.

What does Acciti do when a check-in is late?

It raises one alert, through the same priorities, sounds and on-call policies as anything else you send. Not one an hour, and not one per missed window: a job that has been down since Tuesday is one problem, and being told about it forty times is how somebody learns to swipe the notification away.

When the job checks in again you get a quiet note saying how long it was gone. Every other ping says nothing at all, which is most of them, which is the point of putting one at the end of a job that works.

An interval and the slack you allow
A nightly backup that sometimes takes until four is not late at three. Set the grace period to what the job actually does, and a slow night stays quiet.
GET or POST, no headers, no body
Anything that can make an HTTP request can ping: curl in a crontab, a line at the end of a GitHub Action, a systemd timer, a Python script.
It can wake somebody else
A missed check-in can carry an escalation policy, so a backup that stopped on the week you are away reaches whoever is on call instead.
The URL is the whole credential
Treat it as a secret. Somebody holding it can keep a missed check-in quiet and nothing more: it reads nothing, sends nothing, and cannot make a noise on anybody's phone.

What should have a heartbeat on it?

Anything whose failure is invisible for longer than you would like. Nightly backups and their restores. Certificate renewals. A billing reconciliation. Data exports. The queue worker that has been running for eight months and would not be missed for a day.

Not a web server, which an uptime monitor already watches from outside. Point Grafana or Better Stack at that and send the result here as a connector.

Questions

What is a heartbeat check?
A URL a job calls each time it finishes. If no call arrives within the interval you set plus the slack you allowed, Acciti raises an alert. It is how a cron job or a backup that has stopped running gets noticed, because a job that stops running sends nothing to alert on.
How do you monitor a cron job that fails silently?
Put the ping at the end of the command, after a double ampersand, so it only runs when the job succeeded. Then the absence of a ping is the alert. Pinging unconditionally monitors whether cron ran rather than whether the job worked.
What happens when a job checks in late?
You hear about the missed check-in once, through the same priorities and on-call policies as any other alert. When it checks in again you get a quiet note saying how long it was gone. Every other ping says nothing at all.
Is the heartbeat URL a secret?
Yes. Somebody holding it can keep a missed check-in quiet, and nothing more: it reads nothing, sends nothing, and cannot make a noise on anybody's phone.

Put one at the end of the backup.

Sign in, add a heartbeat, and paste its URL at the end of the job. The next time it does not run, you will know that night rather than in March.

Add a heartbeat

A sound when it matters.

Not when it does not. One request in, one notification on your phone, your watch and your Mac.

© 2026 Acciti

iPhone, Apple Watch and Mac

Built on Swift, Postgres and APNs.