← Blog

Cron job monitoring without the PagerDuty bill

Cron jobs fail quietly. The database backup script that stopped running three Tuesdays ago does not page anyone until a customer notices. PagerDuty solves that — for teams with budget and on-call rotation. If you run a handful of scripts on a VPS or a serverless scheduler, you only need to know: did it run, and did it finish?

The cheap pattern: one ping per run

Treat each job like a heartbeat. At the end of the script (or in a finally block), HTTP GET your metric ingest URL with value 1. Umlogger charts arrivals over time; if nothing shows up in the expected window, you configure a "missing data" alert and get an email.

# /etc/cron.d/nightly-backup
0 3 * * * deploy /opt/backup.sh

# last line of backup.sh:
curl -fsS "https://data.umlogger.com/api/m?key=pmk_BACKUP_KEY&value=1" || echo "metric ping failed" >&2

That is the entire integration for many teams — no agent, no collector, no incident.io seat.

Track duration as a value metric

Create a second metric (type value) and send elapsed seconds when the job succeeds:

START=$(date +%s)
# ... job work ...
ELAPSED=$(( $(date +%s) - START ))
curl -fsS "https://data.umlogger.com/api/m?key=pmk_DURATION_KEY&value=$ELAPSED"

Alert when the rolling average spikes — often the first sign a dependency got slow before the job outright fails.

Serverless and GitHub Actions

The same URL works from Lambda, Cloud Functions, or a workflow step. Fire-and-forget fetch in Node, or curl in bash. Point ingest at https://data.umlogger.com in production (see docs for host details).

When PagerDuty still makes sense

If you need 24/7 phone escalation, on-call schedules, and deep integrations with every cloud service, keep PagerDuty (or similar). Umlogger is for the founder who wants email when the 3am cron missed — not a full incident platform. More background-job patterns are in our cron & worker use case.

Create a metric, paste the curl, set a missing-data alert. Most teams are done before the coffee cools.