Cron job monitoring that notices when a job did not run
A cron job that silently stops is worse than one that fails loudly. Each Asniher heartbeat monitor has a unique URL your job calls when it runs. If the ping is late, missing or reports a failure, you are alerted with the exit status and the end of the job's output.
What you get with cron job monitoring
Cron schedules with time zones
Paste the five-field expression from your crontab and pick the server's time zone. Daylight saving time is handled for you. Fixed periods of up to 30 days work too.
Start, fail and exit-status signals
Ping /start to time a run and catch jobs that hang, /fail to alert right away, or append the exit status. Warning exit codes flag a run that needs a look without opening an incident.
Why it failed, in the alert
POST the job output with the ping and the last 10 KB is kept in the ping log. Failure alerts show the exit status and the last 1,500 characters; webhooks receive the full output.
One outage, one alert
Make a job depend on the API it calls. While the API is down, the job's alerts are held back, so one outage does not page you once per job.
Set it up in a few minutes
Step 1
Create a heartbeat monitor
Name it after the job, paste its cron expression and time zone, and set a grace period a little longer than its slowest normal run.
Step 2
Add the ping to your job
Chain a curl call after the command, or put the asniher-run wrapper in front of it. The wrapper needs only sh and curl, and your job still runs if Asniher cannot be reached.
Step 3
Connect an alert channel
Alerts go to your account email by default. Add Slack, Discord, Telegram or a webhook for the team.
Step 4
Let it run once
The ping log lists each run with its signal, exit status, run time and output, so you can confirm the setup.
30 2 * * * asniher-run -u https://app.asniher.com/api/heartbeat/<token> -- /opt/scripts/backup.sh
30 2 * * * /opt/scripts/backup.sh && curl -fsS -m 10 --retry 3 https://app.asniher.com/api/heartbeat/<token> > /dev/nullLimits by plan
Every plan includes false-alarm protection, incident history and the status badge. Annual billing gives two months free.
Free · $0/mo
- Heartbeat monitors
- 20
- Shortest fixed period
- 5 minutes
- Alert channels
- Email, Slack, Discord
Pro · $2.99/mo
- Heartbeat monitors
- 100
- Shortest fixed period
- 1 minute
- Alert channels
- Email, Slack, Discord, Telegram, Webhook
Team · $9.99/mo
- Heartbeat monitors
- 500
- Shortest fixed period
- 30 seconds
- Alert channels
- Email, Slack, Discord, Telegram, Webhook
| Limit | Free · $0/mo | Pro · $2.99/mo | Team · $9.99/mo |
|---|---|---|---|
| Heartbeat monitors | 20 | 100 | 500 |
| Shortest fixed period | 5 minutes | 1 minute | 30 seconds |
| Alert channels | Email, Slack, Discord | Email, Slack, Discord, Telegram, Webhook | Email, Slack, Discord, Telegram, Webhook |
Good to know
- Heartbeats have their own allowance and never use up your uptime monitors.
- Grace periods go up to 7 days. Fixed periods go up to 30 days.
- Pings are kept for 30 days and the ping log shows the last 100. Each URL accepts up to 60 pings per minute.
- A missed ping opens an incident as soon as the deadline passes, without a re-check, so use the grace period for normal variance in run time.
- systemd OnCalendar schedules are not supported; use a cron expression or a fixed period.
- Anyone with the ping URL can send pings. Treat it like a password.
Common questions
Do heartbeats count against my uptime monitors?
Can I monitor scheduled GitHub Actions workflows?
Can I move my checks from Healthchecks.io?
Start monitoring in under five minutes
Free plan includes 5 monitors, 20 cron job heartbeats, 5-minute checks and a public status page. No card required.