Cron Job Monitoring for Render

Render runs your cron jobs on schedule and logs the output. It does not alert you when a job fails, stops running, or succeeds while doing nothing. DeadManCheck does — in two minutes of setup.

How Render cron jobs work

Render cron jobs run a command from your Git repo (or a Docker image) on a cron expression schedule. Render guarantees at most one active run at a time — if a run is still active when the next trigger fires, Render delays the next run until the current one finishes. Active runs are killed after 12 hours.

What Render doesn't provide: failure notifications. If your cron job exits non-zero, crashes, or processes nothing, the failure appears in the Render dashboard logs — but no one gets paged.

What goes wrong on Render that Render won't tell you about

Integrating DeadManCheck with Render

Create a monitor at deadmancheck.io, set the interval to match your Render cron schedule, then add the ping to your service.

Python service on Render

import requests, os, sys

TOKEN = os.environ["DEADMANCHECK_TOKEN"]
BASE = f"https://deadmancheck.io/ping/{TOKEN}"

def main():
    requests.get(f"{BASE}/start", timeout=5)
    try:
        count = run_job()
        # Pass count for output assertion
        requests.get(BASE, params={"count": count}, timeout=5)
    except Exception:
        requests.get(f"{BASE}/fail", timeout=5)
        sys.exit(1)

if __name__ == "__main__":
    main()

Shell/bash service on Render

#!/bin/bash
set -euo pipefail

BASE="https://deadmancheck.io/ping/${DEADMANCHECK_TOKEN}"

curl -fsS "${BASE}/start" > /dev/null
trap 'curl -fsS "${BASE}/fail" > /dev/null' ERR

/app/run-job.sh

curl -fsS "${BASE}" > /dev/null

Adding the environment variable on Render

Render Dashboard → your cron job service → Environment → Add Environment Variable. Set DEADMANCHECK_TOKEN to the token from your DeadManCheck monitor.

Tip: use a Render Environment Group if you want to share the token across multiple services.

Output assertions for Render cron jobs

Render's monitoring is limited to exit codes. It has no way to know whether your job actually processed any data. DeadManCheck's output assertion fills this gap: configure a minimum count, and alert if your job reports count=0.

Your nightly backup that exports 0 rows triggers an alert — even though Render shows the job as completed successfully. Learn more about output assertions →

Related guides

Start monitoring free — no credit card needed

Free for 5 monitors. $12/mo for 100. Self-host for free.