Backups, imports, invoice runs and queue workers fail without a sound. Give each job a private URL to call when it finishes. If the call doesn't arrive on time, we alert you.
Call the URL with curl, wget or any HTTP client at the end of your job. GET, POST and HEAD all count.
Tell us how often the job runs, from every minute to once a week, and how late it may be before it counts as missed.
A missed run opens an incident and alerts you by Email, Slack, Discord, Telegram or webhook. The next ping closes it and tells you it's back.
Name it, and say how often the job runs and how much delay is fine.
Every heartbeat gets its own secret address. It never appears on status pages or reports.
Put it after your command, so only a successful run checks in.
# crontab -e
0 3 * * * /srv/backup.sh && curl -fsS --retry 3 https://keepbeacon.com/api/heartbeat/your-private-token
# Laravel scheduler
$schedule->command('backup:run')->daily()
->thenPing('https://keepbeacon.com/api/heartbeat/…');
Heartbeats are on every plan and count like any other monitor.