Scheduled Job Monitoring

Cron Jobs Failing Silently —
Data Not Processed, Reports Not Generated

Your scheduled job didn't run at 3am. No error was thrown. No log entry. Everything looked fine — until you discovered 3 days of missing data.

✓ No credit card  ·  ✓ 5-minute setup  ·  ✓ Works with any cron setup

Works with your scheduler
Linux Cron
Heroku Scheduler
AWS EventBridge
Railway Cron
Render Cron
Any HTTP

Silent cron failures compound for days before anyone notices

A job that exits cleanly but does nothing produces no error, no alert, and no log entry. By the time you find the missing data, the damage is done.

⏰

Job missed, no error thrown

Your nightly sync job didn't run. The process exited cleanly with code 0. Nothing was logged. No alert fired. Three days later, a report was wrong and someone started digging.

🧟

Zombie job — running but doing nothing

The process started, acquired a lock, then hung on an external API call. It looked "running" for 6 hours. No data was processed. No alert fired because the process was still alive.

⛓️

Downstream cascade from one missed run

One missed ETL job meant the analytics pipeline had no fresh data. The dashboard showed stale numbers. Three teams made decisions based on wrong data before anyone traced it back.

Heartbeat monitoring that catches silence, not just crashes

NotiLens watches for the presence of a completion signal — not just the absence of an error. If a job never reports in, NotiLens fires immediately.

⏰

Missed run detection

Your cron job sends a heartbeat to NotiLens when it completes. If no heartbeat arrives within your configured window, NotiLens fires immediately — even if the job never threw an error.

⏱️

Runtime anomaly detection

Track how long each job normally takes. If a run exceeds your expected duration, NotiLens alerts — catching zombie processes and stalled executions before they hold locks for hours.

🔗

Job sequence monitoring

For pipelines where Job A must complete before Job B runs, NotiLens tracks the sequence. If Job B fires without a prior Job A completion, you know the dependency was broken.

Manual rules + auto anomaly detection

You get two layers of detection — not one. Set your own thresholds for what you know matters. NotiLens learns the rest automatically.

⚙️ Manual signal rules
Set exact conditions: thresholds, state changes, custom expressions like amount > $100. Fires only when your rule is met.
🧠 Smart anomaly detection
Auto-learns your baseline per event type. Flags spikes, drops, and unusual patterns without any manual threshold — including things you didn't know to watch for.

What NotiLens sends when a scheduled job breaks

Every alert fires within 60 seconds of detection — with the specific job name, failure type, and time window so you can act immediately.

NotiLens Live Feed — cron-jobs
⏰
Cron job 'nightly-sync' missed expected run window (03:00–03:15 UTC)
Topic: cron-jobs • Missed heartbeat • 4 min ago
Critical
🧟
Job 'etl-pipeline' still running after 2h 14min — expected max runtime 25 min
Topic: cron-jobs • Stuck execution • 2 hr ago
Warning
⏰
3 consecutive missed runs: 'invoice-generator' — Mon, Tue, Wed 02:00 UTC
Topic: cron-jobs • Consecutive failures • 18 hr ago
Critical
✅
nightly-sync completed successfully — runtime 8m 42s — all records processed
Topic: cron-jobs • Heartbeat received • 6 hr ago
Completed
⏱️

A cron job that exits cleanly but does nothing looks identical to a success.

A cron job that exits cleanly but does nothing is indistinguishable from a successful run — unless something is watching for the result. NotiLens detects the absence of the heartbeat, not just the presence of an error.

⚡ Avg detection time with NotiLens: <60 seconds

One caught silent failure prevents days of data damage

A 3-day data gap caused by a silent cron failure is far costlier than a year of NotiLens. Here's what teams typically recover.

< 60 sec

missed heartbeat detected — vs days of silent data loss

Days

average time cron failures go undetected without heartbeat monitoring

1 line

of code added to your cron script to enable heartbeat monitoring

Live in 5 minutes

No infrastructure changes. One line added to your job script. Configure your expected window and NotiLens starts watching immediately.

1

Create a topic

Create a cron-jobs topic in NotiLens. Each job can share one topic or have its own — your choice.

2

Add a heartbeat ping

Add a single HTTP call at the end of your job script to signal completion.

import notilens
nl = notilens.init(name="scheduler",
  token="TOKEN", secret="SECRET")

run = nl.task("nightly-sync")
run.start()
# ... do work ...
run.complete("Synced 1,243 records")
# or: run.fail("DB timeout")
3

Set your expected window

Configure: "Alert if no heartbeat received by 03:15 UTC." NotiLens watches the window and fires if it passes without a ping.

Cron job monitoring — common questions

How does NotiLens know when a job should have run? +
You configure the expected window — e.g. "job should complete between 03:00 and 03:15 UTC." If no heartbeat ping arrives in that window, NotiLens fires the alert. You define the schedule, NotiLens watches it.
Does my cron job need to be modified? +
Just one line added at the end — an HTTP POST to your NotiLens topic endpoint when the job completes. If the job fails before reaching that line, NotiLens detects the missing heartbeat.
Can I monitor jobs that run every few minutes? +
Yes. Set a short silence window — e.g. "alert if no heartbeat in 3 minutes." NotiLens handles high-frequency jobs without issue.
What if my job sometimes legitimately takes longer? +
Set a generous runtime threshold with a warning alert, and a tighter "critical" threshold for when it's clearly stuck. Two-level alerting prevents noise while still catching real issues.
Can I monitor cron jobs on multiple servers? +
Yes. Each server's jobs can ping the same NotiLens topic (for aggregate monitoring) or separate topics (for per-server visibility). Use the message title to identify which server the ping came from.

Start monitoring your scheduled jobs

Know the instant a cron job misses, stalls, or fails — before the data damage compounds. Free 7-day trial.

Start Free — 7-Day Trial