Know when your cron job silently stops running
A heartbeat monitor is a dead man's switch for scheduled jobs. Your cron job, backup script, or background worker calls a unique Pingwire URL every time it finishes successfully. If that call does not arrive on time, Pingwire sends a push notification to your phone — so a job that dies quietly still gets noticed.
What is a dead man's switch for cron jobs?
A dead man's switch is a check that fires when something stops happening, instead of when something goes wrong. Your job reports success on every run; silence is the alarm.
That inversion matters because the most dangerous failures are the quiet ones. A crashed job, a disabled cron entry, an expired API key, or a server that never came back after a reboot all produce the same thing: nothing. Nothing is exactly what a heartbeat monitor is watching for.
How do I know if my cron job stopped running?
Create a heartbeat monitor, set how often the job should check in, then add one line to the end of your job:
curl -fsS --retry 3 https://pingwire.dev/hb/YOUR-TOKEN > /dev/null
If Pingwire does not hear from that job within the period you set, plus a grace window you choose, it opens an incident and pushes your phone.
Why didn't my cron job tell me it failed?
Because most jobs cannot. Cron mails output to a local mailbox nobody reads, a crashed process never reaches its own error handler, and a script that exits early because a credential expired often exits cleanly with status 0.
A heartbeat does not depend on the failing thing being healthy enough to report. It reports on success, so the absence of a report is the signal.
Can I report failures too, not just success?
Yes. Wrap the command so success and failure take different paths:
/path/to/job && curl -fsS https://pingwire.dev/hb/YOUR-TOKEN || curl -fsS https://pingwire.dev/hb/YOUR-TOKEN/fail
An explicit failure opens an incident immediately, without waiting for the next missed check-in. You can also send the job's exit code, and add a short body to the request that Pingwire stores as the last payload for debugging.
How do I monitor an AI agent or a long-running autonomous job?
The same way, and for the same reason: an agent run that stalls, loops, or exits on a dead API key produces silence rather than an error. Have the run call the heartbeat URL when it finishes a cycle, and call the failure URL when it aborts.
Pingwire also exposes an MCP connector, so an assistant that already has your Pingwire connection can create monitors and read their status as part of a workflow — useful when the thing you want watched is itself an automated process rather than a website.
People also ask
What if my job runs late but still runs?
You set a grace period on top of the expected interval. A check-in that arrives at exactly the period plus the grace window still counts as on time; only later than that opens an incident.
Does the ping need a POST or an API key?
No. A plain GET to the URL is enough, so a single curl line works. The token in the URL is the only credential, which is why you should treat that URL like a password and rotate it if it leaks.
What happens when the job starts working again?
The next successful check-in resolves the incident, and Pingwire sends a recovery notification telling you how long the job had been silent.
What you get on each plan
Free
- 3 monitors
- Checks every 5 minutes
- 7 days of history
Pro
- 25 monitors
- Checks as often as every 1 minute
- 90 days of history
Billing is paused right now, so every account gets the Pro monitor limits at no cost.
How alerts reach you
Alerts arrive as web push notifications on the devices where you have installed Pingwire, and they also land in your Pingwire chat so there is a record with the numbers in it.
Pingwire does not send SMS, place phone calls, send email alerts, or run on-call rotations and escalation policies. Push and chat are what exists today.
Who builds this
Pingwire is built and run by one developer, and the monitoring described on this page runs on the same infrastructure as the rest of the product. That is worth knowing in both directions: the person who wrote the alerting is the person who answers when it misbehaves, and there is no 24/7 operations team behind it.
Checks run from a single server. Pingwire makes no uptime guarantee about itself, which is exactly why a monitoring tool should never be the only thing you rely on for something critical.
Frequently asked questions
What is a dead man's switch for cron jobs?
A dead man's switch is a check that fires when something stops happening, instead of when something goes wrong. Your job reports success on every run; silence is the alarm. That matters because a crashed job, a disabled cron entry, an expired API key, or a server that never came back all produce the same thing: nothing.
How do I know if my cron job stopped running?
Create a heartbeat monitor, set how often the job should check in, and add a curl call to the end of your job that requests your unique Pingwire URL. If Pingwire does not hear from that job within the period you set, plus a grace window you choose, it opens an incident and pushes your phone.
Why didn't my cron job tell me it failed?
Because most jobs cannot. Cron mails output to a local mailbox nobody reads, a crashed process never reaches its own error handler, and a script that exits early because a credential expired often exits cleanly with status 0. A heartbeat reports on success, so the absence of a report is the signal.
Can I report failures too, not just success?
Yes. Wrap the command so success and failure take different paths. An explicit failure opens an incident immediately, without waiting for the next missed check-in. You can also send the job's exit code, and add a short body to the request that Pingwire stores as the last payload for debugging.
How do I monitor an AI agent or a long-running autonomous job?
The same way, and for the same reason: an agent run that stalls, loops, or exits on a dead API key produces silence rather than an error. Have the run call the heartbeat URL when it finishes a cycle, and call the failure URL when it aborts. Pingwire also exposes an MCP connector, so an assistant can create monitors and read their status as part of a workflow.
What if my job runs late but still runs?
You set a grace period on top of the expected interval. A check-in that arrives at exactly the period plus the grace window still counts as on time; only later than that opens an incident.
Does the ping need a POST or an API key?
No. A plain GET to the URL is enough, so a single curl line works. The token in the URL is the only credential, which is why you should treat that URL like a password and rotate it if it leaks.
What happens when the job starts working again?
The next successful check-in resolves the incident, and Pingwire sends a recovery notification telling you how long the job had been silent.
Start monitoring
Create an account, add your first monitor, and install Pingwire on your phone to receive the alerts.