Cron Job Monitoring

Cron job monitoring that takes one curl command.

PingCron watches for missed check-ins from your scheduled jobs and alerts you when something stops running. No agents, no infrastructure overhaul, no SDK to install.

5 monitors free · No credit card · Live in under 60 seconds

Cron jobs usually fail quietly.

Cron's only job is to start a command at a scheduled time. It does not check whether the command finished. It does not check whether the script exited cleanly. It does not check whether your job actually did anything useful.

Jobs stop running for dozens of reasons — server reboots without restarting the cron service, permission changes after a deploy, expired API credentials, broken scripts after a dependency update, missing environment variables in cron's limited context, network timeouts mid-run, disk-full conditions, hit rate limits.

Without monitoring, you find out from a customer. Or from missing data. Or from a 3 AM page when something downstream finally breaks.

Common silent failures cron alone won't catch:

  • Backup script exits early due to disk-full or permission errors
  • Server rebooted and the cron daemon didn't restart
  • Deploy changed an environment variable cron doesn't have access to
  • API credentials expired and the script silently aborts
  • Hit a third-party rate limit halfway through processing
  • Dependency update broke compatibility, script now throws on import

Setup

Add monitoring to any cron job in one line.

PingCron expects the URL to be hit on schedule. If the check-in is missed beyond the grace period, it sends an alert.

Before

0 2 * * * /scripts/backup.sh

After

0 2 * * * /scripts/backup.sh && curl -fsS https://api.pingcron.io/ping/abc123

The && operator ensures the ping only fires if the script succeeded. To report failures explicitly, ping /fail in your error handler — that triggers an instant alert without waiting for the grace period.

What can you monitor?

Any scheduled job, script, or recurring task.

Database backups

Nightly dumps that need to actually run.

Billing reconciliation

Daily jobs that catch payment failures.

ETL / data sync

Hourly pipelines feeding your warehouse.

Report generation

Scheduled reports stakeholders rely on.

Scrapers

Data collectors that need to keep running.

Cleanup scripts

Disk cleanup, log rotation, cache eviction.

Laravel scheduler

artisan schedule:run that must fire every minute.

Python and Node scripts

Cron-driven scripts in any language.

How it works

Four steps. About a minute total.

01

Create a monitor

Name your monitor and pick what you want to protect.

02

Choose the expected interval

Every minute, every 5 minutes, hourly, daily — whatever your job runs on. Add a grace period to avoid false alarms on slow runs.

03

Add the generated ping URL to your job

One curl command at the end of your script. Works with bash, Python, Node, PHP, Go, Ruby, Laravel — anything that can make an HTTP request.

04

Receive alerts when a ping is missed

Email, Slack, Discord, or webhook. Configure multiple channels per monitor.

Alerts where you'll actually see them.

Configure as many channels as you want per monitor.

Email

HTML alerts with monitor details and direct links.

Slack

Post to any Slack channel via incoming webhook.

Discord

Native Discord webhook integration.

Custom webhooks

POST alerts to any endpoint with full payload.

FAQ

Cron job monitoring is the practice of tracking whether scheduled jobs actually complete on schedule. Each job pings a unique URL on every successful run. If a ping doesn't arrive on time, you get an alert. It catches silent failures that cron itself can't detect — like a backup script that exits with an error, a billing job that crashed mid-run, or a server that rebooted without restarting the cron service.
Without monitoring, you usually don't — until something downstream breaks. With PingCron, your job pings a URL every successful run. If a ping is missed past the grace period, the monitor goes down and you get an alert via email, Slack, Discord, or webhook. You can also explicitly ping /fail at the end of a failed run for instant alerts.
No. The entire integration is one HTTP request to a unique ping URL. No agent, no SDK, no daemon. Anything that can make an HTTP request — bash, Python, Node.js, Go, PHP, Ruby, Laravel, GitHub Actions — can use PingCron.
Yes. PingCron supports intervals as short as every minute. Set the schedule to '1m' when creating the monitor and configure a small grace period (e.g., 30 seconds) to avoid false alarms.
Yes. Set the schedule to '1d' and add a grace period long enough to cover the longest expected run time. If your nightly backup typically takes 30 minutes but sometimes takes an hour, set the grace period to 75 minutes. PingCron only alerts after the schedule plus grace period elapse without a check-in.
If your script exits before reaching the success ping, PingCron simply doesn't receive it. After the grace period passes, the monitor goes down and you get alerted. For instant alerts on script failures, ping /fail in your error handler — that triggers an immediate alert without waiting for the grace period.
Yes. PingCron is language-agnostic. Use curl in bash, requests.get() in Python, fetch() in Node, file_get_contents() in PHP, or Laravel's Http::get() in any artisan command. The integration is a single HTTP request.
Yes. The free plan includes 5 monitors, email/Slack/Discord alerts, and 7 days of history. No credit card required. Upgrade to Pro for $9.99/month if you need 50 monitors and custom webhooks.

Related monitoring guides

Start monitoring your next cron job in under 60 seconds.

Add one line to your script. Get alerted when it stops running.

Start monitoring free

5 monitors free · No credit card · Live in under 60 seconds