DeadManCheck alerts you when jobs stop running, run too long, or run — but do nothing. One monitor for all three.
Free for 20 monitors. No credit card needed.
#!/bin/bash
# Wrap your existing job — takes 2 lines
curl -s https://deadmancheck.io/ping/YOUR-ID/start
./your_actual_job.py
curl -s https://deadmancheck.io/ping/YOUR-ID
That's it. Any language, any platform — if it can make an HTTP request, it works.
A basic heartbeat check only catches the first. DeadManCheck catches all three.
The server was replaced, the crontab got wiped, the scheduler died. Your job checks in after each run — when it goes quiet, you get an alert.
Your 2-minute job suddenly takes 20. DeadManCheck learns each job's normal runtime from its own history and alerts on anomalies — no thresholds to set or maintain.
Exit code 0, on time, and it exported 0 rows. Send a count with your ping, set a rule like count > 0, and get alerted when the job technically succeeded but did no work.
A plain heartbeat only asks did it run? Output assertions also ask did it actually do anything? Include a count in your ping — rows exported, files copied, records synced — and DeadManCheck checks it against your rules on every run. How output assertions work →
Email and webhooks on every plan; Slack, Discord, Telegram and PagerDuty on Pro. Recovery alerts included.
Share a live status page with your users. Free on every plan.
Check URLs every 1–60 minutes, with response time tracking.
Every ping, duration and payload, with a duration graph for each monitor.
Call /start when the job begins and ping when it ends — duration is calculated for you.
Scrape /metrics alongside the rest of your infrastructure.
Run it yourself on Railway, Render or your own server. Pay us only if you want us to host it.
Up and running in under a minute.
Works with everything
Free for 20 monitors. No credit card. Self-host forever.
Create free account