Skip to content
Get started

How to monitor Render cron jobs

Render has a built-in Failed Cron Job notification that fires whenever a cron job execution fails, delivered by email, Slack, or both. Enable it in your service's Notifications settings. However, the built-in notification covers a job that ran and failed — it does not alert you if Render never attempts the run (a deploy-time error, a suspended service, or a missed invocation). For those cases, add a heartbeat from inside the job so you're alerted when an expected ping doesn't arrive.

How do I enable Render's built-in cron failure notifications?

Render sends a Failed Cron Job notification whenever a cron job execution fails. To enable it, go to the cron service in your Render dashboard, open Notifications, and add your email or Slack webhook. The notification covers any run that exits non-zero.

  • Email notifications: Render sends to the address configured in your notification settings.
  • Slack notifications: add a Slack incoming webhook URL to receive alerts in a channel.
  • Each notification includes the cron service name and that the execution failed — check the service logs for the exit code and output.

What does Render's notification NOT cover?

  • A job that was never attempted: if the service is suspended, the cron entry is misconfigured, or Render itself had an issue scheduling the run, no failure notification fires.
  • Silent exits: a job that exits 0 but produced incorrect or partial output reports success.
  • Missed schedule: Render does not send a 'run was skipped' alert.

How do I add a heartbeat to a Render cron job?

Ping a monitor at the end of the job command, using && so the ping fires only on success:

Render cron command (in dashboard)
# Replace the command with your actual job, followed by the heartbeat.
node scripts/nightly.js && curl -fsS -m 10 --retry 3 "https://ping.cronshield.com/<your-check-id>"
The -L flag is important if CronShield redirects the ping URL — curl without -L will not follow a 301/308 and the ping will appear to fail. Use curl -fsS -L -m 10. PING_URL is a placeholder for the endpoint you get on a monitor.

Why does a Render cron job fail silently?

The most common cause is a trailing-slash redirect: if the cron command calls an internal API route without the trailing slash and Render responds with a 308, curl (without -L) counts that as success even though the request was never processed. Always include -L in curl calls from cron jobs.

Add a missed-run alert to this job

The free tier gives you a heartbeat endpoint and an email alert when an expected ping doesn't arrive. Paid tiers add the log-aware diagnosis — the last log line and a likely cause in the alert. The heartbeat receiver ships in an upcoming release; see the plans to learn what each tier adds.

Frequently asked questions

Does Render retry a failed cron job automatically?
No. Render runs the cron job once at the scheduled time. If it fails, it does not retry until the next scheduled slot.
How do I see the output from a Render cron job that failed?
Open the cron service in the Render dashboard and go to Logs. Each execution's stdout and stderr appear there. Render's failure notification tells you a run failed; the logs tell you why.