Self-Hosted Cron Monitor
Node.js Docker Compose stack that monitors cron jobs via heartbeat URLs. Alerts via email if a job misses its schedule. Simple alternative to Dead Man's Snitch.
Self-Hosted Cron Monitor
Docker Compose stack that monitors scheduled jobs via heartbeat URLs. Each cron job pings a unique URL after completing; if the ping does not arrive within the expected window, the monitor sends an email alert. A lightweight self-hosted alternative to Dead Man's Snitch or Cronitor.
What Is Included
- Monitor Service — Node.js app that tracks heartbeat URLs and their expected schedules
- Dashboard — Web UI showing all monitored jobs, last ping time, and current status
- Email Alerting — Sends an alert when a job misses its schedule; sends a recovery email when it resumes
- REST API —
GET /ping/:tokenendpoint that cron jobs call after each successful run
How It Works
- Run
docker compose up -d - Open the dashboard and create a monitor: set the name, expected schedule, and grace period
- Append the generated ping URL to your cron job:
your-command && curl -s http://monitor/ping/TOKEN - If the URL is not called within schedule plus grace period, an email alert fires automatically
What You Get
docker-compose.yml— Node.js app with SQLite storage and persistent volumeDockerfile— Node 22 Alpine imagesrc/— full application source (editable).env.example— SMTP settings and alert email addressREADME.md— setup guide and cron integration examples
Service URLs
| Service | URL |
|---|---|
| Dashboard | http://localhost:3000 |
| Ping endpoint | http://localhost:3000/ping/:token |
Requirements
Docker Engine with the Compose plugin. SMTP credentials for outgoing alert emails (Gmail app password, SendGrid free tier, or similar).