Know when your cron silently dies
Backups, ETL, queue workers, certificate renewals — anything that runs on a schedule. The job hits a unique URL on every run, and when a ping is late the alert is already in your Telegram.
First check in 60 seconds Documentation
No agent. One line of code.
10 checks free forever · 14-day Pro trial, no card required
# crontab -e */5 * * * * backup.sh && \ curl -fsS https://ping.cronalive.com/<uuid> # a ping is late → 🔴 backup.sh is DOWN → Telegram · email · Slack · webhook · PagerDuty
Work that fails without telling anyone
Backups
Know when last night's backup didn't run. A pg_dump that dies at 3 a.m. leaves no error page and no failed request — the failure surfaces on the day you need to restore.
Cron jobs & workers
Know when scheduled work stops. An emptied crontab writes no errors: nothing fails, the work simply stops happening, and the absence of an event is invisible.
Websites & APIs
Know when your service goes down. HTTP checks from three regions, confirmed by a second one before you are paged, plus a warning before the TLS certificate expires.
Every overnight job on one screen
- down db-replication 27 minutes ago Period: 60s
- up api.example.com TLS: 6 d 40 seconds ago Period: 300s
- late wp-cron 19 minutes ago Period: 900s
- up nightly-backup 3 hours ago cron: 30 2 * * *
- up shop.example.com TLS: 63 d 12 seconds ago Period: 60s
- paused cleanup-tmp 2 days ago Period: 21600s
Statuses update over WebSocket, no reload. The certificate of api.example.com expires in 6 days — that alert has already been sent; the RU region is marked as a chronic geo-block and never confirms a down.
Three steps to sleeping well
Create a check
A simple period ("every 5 minutes"), a cron expression or a systemd OnCalendar — with a timezone and a grace period.
Add one line
curl in crontab, a Laravel scheduler macro, a Python decorator or a CLI wrapper — a check can even be created by its first ping.
Get alerted
Telegram-first: DMs and groups. Plus email, HMAC-signed webhooks, Slack, Discord, Mattermost and PagerDuty — with quiet hours and repeat reminders.
Using Laravel? One line per scheduled task →
More than "ping arrived / didn't"
Lifecycle signals
/start, /fail, exit codes 0–255 — run duration and hung jobs are visible on a chart.
HTTP uptime checks
Status codes, keyword checks, redirects, basic auth. An outage is confirmed by a second probe from another region.
SSL expiry alerts
A warning 7/14/30 days before the certificate expires — before your customers notice.
Uptime & history
Live dashboard over WebSocket, 30/90/365-day uptime, ping log with body, IP and user-agent.
API & SDKs
REST API v1 with rw/ro keys, Laravel/Python/Node packages, auto-provisioning straight from code.
Public badges
SVG status of a check or a whole tag — for READMEs, wikis and status pages.
Alerts where you actually read them
Every channel gets event and tag filters, quiet hours, reminders and a delivery journal. Need your own format? Webhooks with body templates.
What people monitor with CronAlive
Backups
A 3 a.m. pg_dump is the classic silent failure: the script dies, and you find out on restore day. Ping as the last line of the backup script, and a missed copy wakes you — not your customers.
WP-cron
wp-cron only runs when traffic comes, and it dies quietly along with it. Move it to a real system cron with a ping, and WordPress scheduling stops being a black box.
Scrapers & ETL
The nightly import "ran" — but hung halfway? The /start signal plus a success ping put every run's duration on a chart, so a stall shows up before the reports break.
Queue workers
A live worker process doesn't mean jobs are being processed. A heartbeat from inside the worker alerts when the queue goes quiet for too long — whatever the cause.
Certbot renewals
Certificate renewal breaks silently and expires loudly. A ping after certbot renew plus an SSL alert 14 days before expiry — two independent lines of defense against the "expired" padlock.
Docker & Kubernetes
A container that exited says nothing about whether the work got done. curl as the last command of the container (or in ExecStopPost) turns "it ran" into a fact — and for a Kubernetes CronJob a late ping catches the crashed pod, the image that was never pulled and the node that never scheduled the job alike.
Your website is UP. Your backup is NOT.
Uptime monitoring answers one question: does the site respond? CronAlive answers the other one: is the work behind the site actually happening? A server can return HTTP 200 all week while the cron has stopped, the backup has been failing, the ETL is hung and the queue worker is dead.
| Ordinary uptime monitoring | CronAlive |
|---|---|
| The site responds | The job actually ran |
| HTTP 200 | The backup was created |
| The server is reachable | The ETL finished |
| The API answers | The worker is alive |
CronAlive does both: the same dashboard runs HTTP checks with multi-region confirmation and TLS expiry warnings. Neither replaces the other — a site that answers and a job that ran are two separate facts, and you want both.
Checking one URL right now, without an account? The HTTP status checker and the SSL certificate checker are free.
Flat-rate: no pay-as-you-go surprises
Pro popular
$7 / month
$67 / year
≈ $5.58 per month
100 checks · interval from 1 min · 1 year of history · API, HMAC · 1M pings/mo
Business
$19 / month
$182 / year
≈ $15.17 per month
500 checks · interval from 30 sec · 2 years of history · unlimited members, priority support · 10M pings/mo
Checkout is handled by Paddle as merchant of record, in USD. Yearly billing saves 20%.
No credit card required. Cancel anytime.
Comparing options? CronAlive vs Healthchecks.io and vs Cronitor — with the sums worked out.
Frequently asked questions
How is CronAlive different from Healthchecks.io and Cronitor?
Three things. Flat-rate pricing: a fixed monthly fee instead of pay-as-you-go, so the invoice never surprises you. Telegram-first alerts: DMs and group chats, linked with a single tap — no SMTP lag. And multi-region HTTP checks with quorum confirmation, so one flaky vantage point never pages you.
What happens if I go over the ping quota?
Pings are never dropped — breaking a heartbeat defeats the purpose. You'll get an email suggesting an upgrade. Only after exceeding the quota more than 3x for two months in a row (and a 7-day heads-up) do we suspend creating new checks — existing ones keep being monitored and keep alerting.
How do I cancel?
Anytime — the plan stays active until the end of the paid period, then the account drops to Free. Checks over the Free limit get paused, not deleted. You can export your data as JSON and delete the account yourself.
Are ping bodies encrypted?
Yes. Ping bodies and HTTP check headers can carry sensitive data, so they are encrypted at the application level and purged when your plan’s retention expires. Everything travels over HTTPS only.
Why two ping domains?
Delivery resilience: dashboard snippets include a fallback out of the box (curl url1 || curl url2), and SDKs fetch the current domain list from the API. Losing one domain loses neither pings nor your sleep.
Does it work with systemd, Laravel and Kubernetes CronJobs?
Yes. systemd: ExecStopPost with $EXIT_STATUS and OnCalendar schedules. Laravel: a composer package with a scheduler macro. Kubernetes CronJob: curl as the last command of the container. Plus Python and Node packages.
Can my team use it?
Yes: project members with owner, admin and readonly roles. Invite a colleague by email from the project settings — the link is valid for 7 days, and if they have no account yet, the invitation applies automatically once they sign up and verify their email. Pro includes up to 5 members, Business has no member limit; plan limits apply to the owner’s account, not per member.
Is there an API?
REST API v1: check CRUD, ping and event history, integration and pause management. Read-write and read-only project keys are issued in the project settings; a 600 req/min rate limit, an OpenAPI spec and static docs.
What's a grace period, and why isn't the alert instant?
Grace is the allowance after the deadline: cron rarely fires to the second, and without it any drift would page you for nothing. Shortly after the deadline (with a small slack of up to 30 seconds, so second-long delays never blink) the check turns "late", and only once grace runs out does the "down" alert fire. An explicit fail signal alerts immediately, no waiting.
What if CronAlive itself goes down?
A monitoring service must be more available than what it monitors. The ping ingestion tier deploys and fails independently of the dashboard, and there are multiple ping domains. During a global outage on our side false down alerts are suppressed, and statuses are reconciled once we recover.
What is cron monitoring?
It is a dead man’s switch for scheduled work. The job sends an HTTP request to a URL of its own on every run, and the service raises the alarm when that request does not arrive in time. Note which way round it works: ordinary monitoring alerts on a bad answer, this one alerts on the absence of an answer — which is the only way to notice a job that never started at all.
Why can a cron job fail silently?
Because none of the usual failures produce an error anyone sees. The crontab is wiped by a server migration, the file loses its execute bit, the job runs under a user without the right permissions, cron's minimal environment lacks a PATH your script assumed, or a stale lock leaves the run hanging. In every one of those cases nothing crashes and nothing is logged: the work simply stops happening, and the absence of an event is invisible from inside the machine.
Can I monitor WordPress cron jobs?
Yes, and it is the usual reason people find us. wp-cron only fires when someone visits the site, so on a quiet site scheduled posts, backups and plugin updates silently stop. Move the schedule to a real system cron, add a ping to that line, and the black box becomes a check like any other.
Can I monitor Docker containers and Kubernetes CronJobs?
Yes. Put curl as the last command of the container, or in ExecStopPost for a systemd unit, and the ping only goes out when the work actually finished. For a Kubernetes CronJob the same line at the end of the pod covers three different failures at once: the pod that crashed, the image that was never pulled and the node that never scheduled the job.