Guides
Getting started
- How to monitor cron jobs (and get alerted when they don't run)Cron is silent when a job doesn't run. Here is how to detect missed, failed and hung cron jobs with a heartbeat URL.
- Heartbeat monitoring vs uptime monitoring: what each one catchesUptime checks ask 'is it answering?'. Heartbeats ask 'did it run?'. Why scheduled jobs need the second kind, and when you need both.
- Get alerted before an SSL/TLS certificate expiresAuto-renewal fails silently more often than you think. Monitor certificate expiry and chain validity, and get warned days ahead.
Platforms and schedulers
- Monitoring Kubernetes CronJobs for missed and failed runsKubernetes CronJobs can silently stop scheduling. Add a heartbeat to each CronJob to detect missed, failed and stuck runs.
- Monitoring systemd timers: alert when a timer job fails or stops runningsystemd timers fail quietly too. Use ExecStartPost and OnFailure to report success and failure to a heartbeat monitor.
- Monitoring cron jobs in Docker containersCron inside containers fails silently: no daemon, missing environment variables, logs nobody reads. Here's how to catch it.
- Monitoring scheduled AWS Lambda functions (EventBridge)Know when a scheduled Lambda didn't run, timed out or threw, without wiring up CloudWatch alarms for every function.
- Monitoring GitHub Actions scheduled workflows (cron) for missed and failed runsGitHub Actions schedules can be delayed, skipped or disabled automatically. Add a heartbeat so you notice when a scheduled workflow stops running.
- Monitoring GitLab CI scheduled pipelinesGet alerted when a GitLab scheduled pipeline fails or quietly stops running, with a few lines of .gitlab-ci.yml.
- Monitoring Windows Task Scheduler jobs with a heartbeatAlert when a Windows scheduled task fails or stops running, using a small PowerShell wrapper that reports the exit code.
Frameworks and languages
- Monitoring Rails scheduled jobs (whenever, sidekiq-cron, Solid Queue)Get alerted when a Rails scheduled job fails, hangs or silently stops running, whether it is scheduled by cron or by a job queue.
- Monitoring the Laravel scheduler and scheduled commandsGet alerted when a Laravel scheduled command fails or the scheduler itself stops running, using pingOnSuccess and pingOnFailure.
- Monitoring Node.js scheduled jobs (node-cron, BullMQ)Get alerted when a Node.js scheduled task fails, hangs or stops running after a crash or deploy.
- Monitoring Python scheduled jobs (scripts, Django commands, APScheduler)A small, dependency-free heartbeat for Python jobs: get alerted when a script, Django management command or APScheduler job fails or stops running.
- Monitoring Celery beat periodic tasksCelery beat can stop scheduling without errors. Send a heartbeat from each periodic task, and alert on failures with Celery signals.
- Monitoring Go scheduled jobs (robfig/cron and plain cron)A small heartbeat helper for Go: get alerted when a scheduled function fails, panics, hangs or stops running.
Backups
- How to know your backups actually ranBackups that silently stopped are the classic disaster. Monitor backup jobs with heartbeats, check the output size, and alert on failure.
- Monitoring restic and borg backups: alert on failed or missing snapshotsA backup script that stops running is the classic silent failure. Wrap restic or borg with a heartbeat that reports exit codes and output.
Comparisons
- Cron job monitoring tools compared: Healthchecks.io, Cronitor, Dead Man's Snitch and CronPupAn honest side-by-side of heartbeat/cron monitoring services: free tiers, pricing at 50 and 300 monitors, and where each one is the better pick.
- A Healthchecks.io alternative: when CronPup fits, and when it doesn'tComparing CronPup with Healthchecks.io for cron and heartbeat monitoring: price at 50 and 300 monitors, TLS checks, and when to stay with Healthchecks.io.
- A Cronitor alternative for cron and heartbeat monitoringComparing CronPup with Cronitor for job monitoring: per-monitor vs flat pricing, scope, and when Cronitor is the better choice.
- A Dead Man's Snitch alternativeComparing CronPup with Dead Man's Snitch for heartbeat monitoring: tiers, cron schedules, run tracking, and TLS checks.
More
- Better Stack heartbeats vs CronPup: an honest comparisonBetter Stack is an incident-management platform with heartbeat monitoring built in. CronPup does only job heartbeats and TLS expiry, at flat prices. Here is when each fits.
- Cron job not running? A checklist (and how to find out next time)The common reasons a cron job silently doesn't run: PATH, %, permissions, timezones, missing newline, the wrong crontab. Plus how to get alerted.
- Monitoring Apache Airflow DAGs with a dead man's switchAirflow can't alert you if the scheduler itself is down or a DAG stops being scheduled. Add an external heartbeat per critical DAG.
- Alert when a scheduled Jenkins job doesn't runJenkins tells you when a build fails, not when a timer-triggered job never starts. Add a heartbeat to catch both.
- Monitoring Spring @Scheduled tasksA @Scheduled method stops when the app is down, the thread pool is stuck or the bean isn't loaded, and nothing logs it. Add a heartbeat.
- Is Heroku Scheduler running your job? How to knowHeroku Scheduler is best-effort: Heroku says jobs can be skipped or run twice. Monitor each scheduled job with a heartbeat.
- Monitoring Google Cloud Scheduler and Cloud Run jobsCloud Scheduler retries and logs, but nobody is told when a job stops being triggered or never finishes. Add an end-to-end heartbeat.
- WP-Cron not running? Monitor WordPress scheduled tasksWP-Cron only runs when someone visits the site, so low-traffic sites miss scheduled posts and backups. Use a real cron and a heartbeat.