New Feature

Your cron job failed at 2am. Did you know?

Silent failures are the worst kind. Your backup didn't run. The ETL pipeline stalled. The cert renewal script crashed. Nobody found out until Monday morning — or worse, until data was gone.

crontab -eone line. that's it.
# your existing cron job, unchanged
0 3 * * * /opt/scripts/backup.sh
# add a ping at the end
0 3 * * * /opt/scripts/backup.sh && \
curl -fsS https://upwatch.dev/ping/YOUR_TOKEN > /dev/null
Set Up Your First Heartbeat — Free
check No agentscheck No pollingcheck 10 free heartbeats
warning

You can't monitor cron jobs with uptime checks.

An HTTP monitor checks if a URL is reachable. But a cron job that fails silently still returns 200 on the health endpoint. The only way to know a job ran is if the job tells you it ran.

How heartbeat monitoring works

1

Create a heartbeat in Upwatch

Set the expected interval (every hour, every day) and a grace period. We give you a unique ping URL.

2

Append the ping URL to your job

One curl call at the end of your script. Works with cron, systemd timers, GitHub Actions, CI pipelines, or any shell script.

3

We alert you when the silence is too long

If we don't hear from your job within the interval + grace period, we open an incident and notify you immediately.

What people monitor with heartbeats

database

Database Backups

Know instantly if your nightly pg_dump or mysqldump didn't complete.

sync_alt

ETL Pipelines

Catch stalled data pipelines before downstream reports start showing stale data.

lock_reset

Cert Renewals

Confirm your certbot or acme.sh renewal script is running before the cert expires.

deployed_code

CI / Deploy Jobs

Alert if your scheduled deploy or test pipeline stops running.

cleaning_services

Cleanup Scripts

Temp file cleanup, log rotation, cache prune — the jobs nobody thinks about until disk fills up.

mail

Scheduled Reports

Verify your weekly report generator ran before stakeholders ask why their inbox is empty.

Works everywhere you run jobs

bash / sh
#!/bin/bash
/opt/scripts/backup.sh
curl -fsS https://upwatch.dev/ping/TOKEN > /dev/null
python
import urllib.request
# ... your job logic ...
urllib.request.urlopen("https://upwatch.dev/ping/TOKEN")
github actions
- name: Ping heartbeat
run: curl -fsS https://upwatch.dev/ping/TOKEN

Full docs include wget, PowerShell, Node.js, and the /fail endpoint for explicit failure reporting.

person

Built by an SRE who's been paged at 3am too many times

Solo dev · Self-funded · No VC money

"The cron job that didn't run is the one that bites you. I've seen DBAs lose sleep over backups that silently stopped two weeks ago. Heartbeat monitoring is the fix that costs you one curl command."

Early adopter offer

Use code EARLY at checkout

3 months of Pro — completely free

Unlimited heartbeats + unlimited monitors, 30-second checks, Slack/Discord alerts

The next silent failure is already scheduled. Would you rather find out at 2am or Monday morning?

Monitor Your First Cron Job — Free

10 free heartbeats. No credit card. Setup in 60 seconds.