Monitor Heroku Scheduler Jobs
Heroku Scheduler runs a one-off dyno on a schedule — there's no retry and no alerting built in, so a failing or silently-skipped run is easy to miss entirely without an external ping.
Setup
Create an incoming monitor
Add a heartbeat monitor matching the scheduled frequency (Heroku Scheduler supports 10-minute, hourly, and daily jobs).
Ping at the end of the script
Add the ping call after the real work succeeds.
# ...existing script logic...
require 'net/http'
Net::HTTP.get(URI('https://ping.pingtastic.net/ping/nightly-cleanup'))Match the command exactly
Make sure the job's command in the Heroku Scheduler UI matches exactly what you test locally (e.g. bundle exec rails runner bin/nightly_cleanup).
Gotchas
- ⚠Heroku Scheduler jobs have no automatic retry and no failure notification of any kind — if the dyno fails to boot (e.g. a bad release) the job simply doesn't run, silently.
- ⚠Scheduled times are approximate — Heroku documents that jobs may run several minutes after their configured time under load, so give the monitor's grace period real slack.
Questions
Does Heroku notify me if a Scheduler job fails?
No — Heroku Scheduler has no built-in failure notification. Combined with jobs sometimes running late, a heartbeat ping with a generous grace period is the most reliable way to know a job actually ran.
Does this work the same for one-off dynos triggered manually via heroku run?
Yes — the ping is inside the script itself, so it fires the same way whether the dyno was started by Heroku Scheduler or triggered manually.
Start monitoring your Heroku heroku scheduler
Set up your first monitor in under five minutes.
Get started — $5/month