Cron jobs fail quietly. A backup script runs out of disk at 02:00, an invoice export throws an exception, a server reboots and the crontab never runs again. Nothing goes down, nothing returns a 500, and nobody notices until a customer asks for an invoice or you need to restore a database.
Uptimecheck monitors scheduled jobs with heartbeats. Instead of checking your job from the outside, the job checks in with us.
Set up a cron job monitor in three steps
- Create a cron job monitor and give it the schedule your job runs on: a crontab expression such as
0 3 * * *in your time zone, or a simple period such as every hour. - Copy the ping URL.
- Add one request at the end of your job, after the work succeeds:
backup.sh && curl -fsS https://your-ping-url.
If no ping arrives within the expected time plus the grace period you choose, from 1 minute to 6 hours, the cron job counts as down and alerts go to your channels. When the job runs again, a recovery notice follows. Our guide on how to monitor cron jobs covers schedules, grace periods and common mistakes, and cron expressions explained helps with the syntax.
More than “it ran”
- Start and finish: call
/startwhen the job begins and the normal ping URL when it ends, and you see how long every run took. - Maximum run time: get an alert when a run that started has not finished in time, with a limit from 1 minute to 24 hours.
- Exit codes: call
/fail, or the exit code itself such as/1, to report a failure right away instead of waiting for a ping that never comes. - Output: POST the job’s output and it is shown with failures and in the alert, so you can read the error without logging in to the server.
What to monitor with cron jobs
- Database and file backups.
- Nightly imports, exports and report generation.
- Queue workers and scheduled tasks in Laravel, Rails or Django.
- Certificate renewal scripts.
- Billing runs and invoice emails.
- Data syncs between systems.
Ping on success, or send the exit code
Put the finish request after the work, chained so it only runs if the job exits cleanly. A job that starts but crashes halfway then shows up as missing, which is exactly what you want to know. Better still, send the exit code: backup.sh; curl -fsS https://your-ping-url/$? reports success or failure either way, and the failure arrives the moment it happens.
Cron jobs next to the rest of your stack
A failed backup is often a symptom. The disk filled up, the database server rebooted or a DNS record changed. Cron jobs sit in the same account as server monitoring and uptime monitoring, so you see the full disk and the missed job side by side.
Heartbeats beyond cron
Anything that runs on a schedule can send a heartbeat: a Windows scheduled task, a Kubernetes CronJob, a GitHub Actions workflow, a serverless function on a timer or a long-running worker that reports in every few minutes. If it can make an HTTP request, it can tell Uptimecheck it is alive. The request is plain HTTPS, so it works through most firewalls without extra configuration.
Start includes 10 cron jobs, Professional 50 and Business 150. Alerts go to email, Slack, Microsoft Teams, Discord, Google Chat, Mattermost, Telegram, PagerDuty, ntfy, Pushover, webhooks and push notifications on every plan.
Plans start at €9 per month billed yearly or €12 billed monthly, excl. VAT. See the pricing page for details, or start a 14-day free trial without a card.