Cron Job Monitoring — know when your scheduled jobs silently fail.
A dead man's switch for your backups, ETL pipelines, and background workers: every run pings UptimeEye, and the moment a ping is missing, you get alerted. No ping, no excuses.
No credit card required • Commercial use allowed • One curl command to set up
How It Works
Create a monitor, get a unique beat URL, and add one line to your job. UptimeEye expects a ping on every scheduled run — and alerts you the moment one is missing.
Add one line to your crontab
The && makes it a dead man's switch: the ping only fires when the backup succeeds. If the script fails — or never runs — no ping arrives and UptimeEye alerts you.
# Ping UptimeEye only if the backup succeeds (dead man's switch)
0 3 * * * /backup.sh && curl -fsS https://api.uptimeeye.com/v1/beat/YOUR_TASK_IDTrack runtime with start / success / fail
For longer jobs, signal the start and the result separately. UptimeEye measures the runtime between /start and /success, and a /fail ping triggers an alert immediately.
#!/bin/bash
# Signal the start — UptimeEye begins measuring runtime
curl -fsS https://api.uptimeeye.com/v1/beat/YOUR_TASK_ID/start
if /usr/local/bin/nightly-etl.sh; then
# Success: stops the timer and records the runtime
curl -fsS https://api.uptimeeye.com/v1/beat/YOUR_TASK_ID/success
else
# Failure: triggers an alert immediately
curl -fsS -X POST https://api.uptimeeye.com/v1/beat/YOUR_TASK_ID/fail
fiWorks anywhere — GitHub Actions, Kubernetes, anything with curl
The beat endpoints accept HEAD, GET, and POST requests with no authentication headers, so any scheduler that can make an HTTP request can report in — CI pipelines, Kubernetes CronJobs, serverless functions, or a Raspberry Pi in your closet.
name: nightly-job
on:
schedule:
- cron: "0 3 * * *"
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run the job
run: ./scripts/nightly-job.sh
- name: Report success to UptimeEye
if: success()
run: curl -fsS https://api.uptimeeye.com/v1/beat/${{ secrets.UPTIMEEYE_TASK_ID }}
- name: Report failure to UptimeEye
if: failure()
run: curl -fsS -X POST https://api.uptimeeye.com/v1/beat/${{ secrets.UPTIMEEYE_TASK_ID }}/failEverything Your Background Jobs Need
Real Cron Expressions with Timezones
Define schedules as actual cron expressions (e.g. 0 3 * * *) bound to a timezone, or as simple intervals. UptimeEye knows exactly when each run is due — daylight saving time included.
Configurable Grace Periods
Jobs sometimes run a little late. Set a grace period from 0 to 1440 minutes per monitor so you only get paged when something is genuinely wrong — not when a backup takes five extra minutes.
Runtime Tracking
Ping /start when the job begins and /success when it finishes. UptimeEye measures execution time on every run, so you catch jobs that are slowly degrading before they start failing.
Alerts on Every Channel
When a job misses its schedule or reports a failure, alerts go out via Slack, Discord, Telegram, MS Teams, PagerDuty, generic webhooks, or email — and again when it recovers.
Status Page Integration
Publish cron monitors on your public status page alongside uptime monitors, including recent events — so your team and your customers see the same picture.
Dead Man's Switch by Design
Chain the ping to your command with && so it only fires on success. No ping means no successful run — and UptimeEye marks the task as down and alerts you.
One Tool Instead of Two
Typical uptime tools
Treat cron monitoring as an afterthought — a basic heartbeat bolted onto HTTP checks, often without real cron expressions, timezones, or runtime tracking.
Dedicated cron tools
Do heartbeats well, but don't monitor your websites and APIs — so you end up paying for and maintaining a second monitoring tool anyway.
UptimeEye
Bundles both in one plan: full-featured cron monitoring with cron expressions, timezones, and runtime tracking — plus uptime monitoring with 30s checks, shared alert channels, and shared status pages.
Free plan: 3 cron monitors + 5 uptime monitors + 1 status page. Pro: €29/month for 50 cron monitors + 50 uptime monitors with 30-second checks.
Frequently Asked Questions
What is cron job monitoring?
Cron job monitoring (also called heartbeat or dead man's switch monitoring) flips traditional monitoring around: instead of UptimeEye checking your service, your job pings UptimeEye every time it runs successfully. If the expected ping doesn't arrive on schedule, UptimeEye marks the job as down and alerts you. This catches failures that normal uptime checks can't see — like a backup script that simply never ran.
What's the difference between simple and cron-based schedules?
UptimeEye supports two schedule types. Simple schedules expect a heartbeat at a fixed interval (e.g. every 15 minutes). Cron schedules use a real cron expression with a timezone (e.g. '0 3 * * *' in Europe/Berlin), so UptimeEye knows exactly when each run is due — including correct handling of daylight saving time.
What happens when a job misses its schedule?
Each monitor has a configurable grace period from 0 to 1440 minutes. If no heartbeat arrives within the expected time plus the grace period, the task is marked as down and alerts go out over your configured channels: Slack, Discord, Telegram, MS Teams, PagerDuty, generic webhooks, or email. You're alerted again when the job recovers.
Can I track how long my jobs take to run?
Yes. Ping the /start endpoint when your job begins and the /success endpoint when it finishes. UptimeEye measures the runtime between the two, so you can spot jobs that are getting slower over time — not just jobs that fail outright. You can also ping /fail to report an explicit failure immediately.
How many cron monitors do I get for free?
The free plan includes 3 cron monitors, 5 uptime monitors, and 1 status page — commercial use allowed, no credit card required. The Pro plan at €29/month includes 50 cron monitors and 50 uptime monitors with 30-second uptime checks.