The server was off
A reboot, a full disk or a host problem, and the crontab simply did not fire.
Backups, imports and queue workers on your own server fail quietly. Add one line to the end of the job, and CronEngine tells you the moment it does not check in on time.
The problem
Error alerts only fire when something runs and fails. When a job does not run at all, nothing is logged and nobody is told. You find out days later, when the backup you need is not there.
A reboot, a full disk or a host problem, and the crontab simply did not fire.
A server move or a new deploy, and nobody set the schedule up again.
The script died before it could log anything or send its own error.
It started but never finished, quietly blocking the next run.
A heartbeat catches all four, because it listens for the job instead of waiting for an error.
How it works
Say how often the job should run, and how late it may be. You get a private address to ping.
Add one request to the end of the job. Any tool that can call a URL works.
If the ping does not arrive in time, you get an alert by email, Slack, Discord, Telegram or webhook.
# Run the backup at 03:00, then ping when it succeeded 0 3 * * * /usr/local/bin/backup.sh && curl -fsS https://cronengine.com/ping/hb_your-token
More than “it ran”
One ping says the job finished. Add a ping at the start and we measure how long every run takes, so a job that slowly gets slower shows up long before it breaks. Ping /fail and you hear about a failure straight away.
Works with anything
No agent to install and no library to add. Copy-ready examples for the most common setups are on the integrations page.
What people watch
Database dumps and file backups that have to run every night.
Workers that should keep checking in every few minutes.
Feeds from suppliers, CRMs and payment providers.
Digests, invoices and reports that go out on a schedule.
Jobs that clear old data before the disk fills up.
Scheduled pipelines that can be delayed or skipped.
In the same account
For work your app can do when asked, CronEngine can call the URL on a schedule instead.
Cron jobsUptime checks every minute, with certificate expiry warnings.
Uptime monitoringPut heartbeats on a status page, so people see that the nightly import ran.
Status pagesPricing
Pings are free and never count against your scheduled runs. Prices exclude VAT.
Free
€0
2
heartbeats
100 pings of history each, plus cron jobs and uptime monitors.
Starter
€5.99/mo
10
heartbeats
250 pings of history each, plus cron jobs and uptime monitors.
Pro
€12.99/mo
25
heartbeats
500 pings of history each, plus cron jobs and uptime monitors.
Business
€24.99/mo
75
heartbeats
1,000 pings of history each, plus cron jobs and uptime monitors.
FAQ
A private address your job calls when it finishes. If the call does not arrive in time, CronEngine alerts you. Some tools call this a dead man’s switch.
No. Anything that can make a web request works: curl, wget, PowerShell, or one line in your own code.
Give the heartbeat a cron schedule instead of an interval, such as weekday mornings only, and it stays quiet the rest of the time.
Use a short timeout and a few retries on the request, as in our examples. The grace period also gives a late ping time to arrive.
No. Pings are free and never use your scheduled runs. Your plan only sets how many heartbeats you can have.
Yes, from the Starter plan, so customers can see that a nightly import or sync ran.
Set up your first heartbeat in a couple of minutes. Free plan, no credit card.