Monitor Render cron jobs — detect failed and missed scheduled tasks
Render cron jobs run your command in a one-off container on a standard unix cron schedule. A non-zero exit code makes the job "failed" in the Render dashboard, but no notification is sent unless you've enabled email alerts. A job that runs but does the wrong thing — writes zero bytes, silently errors inside a try/catch — looks green. Add one curl ping at the end of your start command to detect every failure mode in seconds, not hours.
Setup: one change to render.yaml, about a minute
Append a ping to the start command. Works for any language — it's just shell.
Create a heartbeat monitor in LastPing
In the console, create a monitor with the same schedule as your Render cron job (standard unix 5-field cron). Set a grace window of 30–60 minutes for daily jobs. Copy the ping URL.
Add the ping to render.yaml
Append && curl … to the startCommand. The && means the ping only fires if your command exits 0. Store the monitor ID in an environment variable.
Optional: alert immediately on failure too
Add || curl …/fail after the success ping to be paged the moment the job fails instead of waiting out the grace window:
Via the Render dashboard (no render.yaml)
If you're configuring the cron job through the Render UI rather than render.yaml, paste the full command including the curl ping into the Command field. Add LASTPING_PING_URL as an environment variable in the service's Environment tab.
What this catches
- Command exits non-zero — ping skipped; silence in grace window → incident opens.
- Command runs but silently fails — validate output size inside the command and only ping on confirmed success.
- Render doesn't start the job — no ping arrives in the window → incident opens.
- Recovery — next successful run closes the incident automatically.
On Railway? See Railway cron jobs. On Fly.io? See Fly.io scheduled machines. For the general cron pattern, see Monitor cron jobs. For backup-specific failures, see backup silent failure.
Questions people ask
Front-loaded answers — the most important fact first.
-
Does Render alert when a cron job fails?
Render sends an email notification if you've enabled "Failed Deploy" alerts in the service's notification settings. But "failed deploy" means the build failed — a cron job that builds fine but exits non-zero at runtime shows as failed in the dashboard without any notification unless you configure it. Missed runs (when Render doesn't start the container) produce nothing. Dead-man's-switch monitoring catches both.
-
What timezone does Render use for cron schedules?
Render cron jobs use UTC for all schedules. There is no per-service timezone setting. Write your schedule in UTC or convert your local time to UTC before entering it.
-
How long can a Render cron job run?
Render cron jobs have a default timeout. If your job is long-running, check Render's documentation for your plan's timeout limit. Send a
/startping at the beginning and set the LastPing grace window to the expected maximum runtime to detect hung jobs before the Render timeout kills them. -
Is this free?
Yes. LastPing is free and fully hosted with no monitor cap and no paid tier. See vs Healthchecks.io and vs Cronitor.
Render cron jobs fail quietly. One curl ping changes that.
Append it to your start command. First alert in under a minute — and LastPing monitors itself the same way.