---
title: "Deploy Healthchecks | (Just Updated) Cron Job Monitoring, API Key Generated, Persistent"
description: "Cron job monitoring. API key and login generated, data on a volume."
category: "Observability"
url: https://railway.com/deploy/healthchecks-or-just-updated-cron-job-mo
---

# Deploy Healthchecks | (Just Updated) Cron Job Monitoring, API Key Generated, Persistent

Cron job monitoring. API key and login generated, data on a volume.

**[Deploy Healthchecks | (Just Updated) Cron Job Monitoring, API Key Generated, Persistent on Railway](https://railway.com/template/healthchecks-or-just-updated-cron-job-mo)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/healthchecks-or-just-updated-cron-job-mo/manifest.json

- **Creator:** SuperSlowSloth
- **Category:** Observability

## Template content

### healthchecks

- **Image:** healthchecks/healthchecks@sha256:aa08a61b0dcfd83f1332eab195d5cec1b595ae076eb8388cadf8a3d597114f9b
- **Start command:** `/bin/sh -c 'eval "$(echo IyEvYmluL3NoCiMgSGVhbHRoY2hlY2tzIGJvb3Qgd3JhcHBlciBmb3IgUmFpbHdheS4gUnVucyBhcyByb290IChSQUlMV0FZX1JVTl9VSUQ9MCkgb25seSBsb25nIGVub3VnaAojIHRvIHByZXBhcmUgdGhlIHJvb3Qtb3duZWQgdm9sdW1lLCB0aGVuIGRyb3BzIHRvIHRoZSBpbWFnZSdzIG93biB1c2VyIChoYywgdWlkIDk5OSkuCnNldCAtZXUKREFUQT0vZGF0YQpta2RpciAtcCAiJERBVEEiCmNob3duIC1SIDk5OTo5OTkgIiREQVRBIgplY2hvICJbcmFpbHdheV0gaGVhbHRoY2hlY2tzIHVpZD0kKGlkIC11KSBkYXRhX293bmVyPSQoc3RhdCAtYyAldTolZyAiJERBVEEiKSBwb3J0PSR7UE9SVDotdW5zZXR9IgoKIyBTZXR0aW5ncyB0aGUgdGVtcGxhdGUgY2Fubm90IHB1Ymxpc2ggYXMgdmFyaWFibGVzIChhIGxpdGVyYWwgdmFyaWFibGUgaXMgZHJvcHBlZCBieSB0ZW1wbGF0ZUdlbmVyYXRlKS4KZXhwb3J0IERFQlVHPUZhbHNlCmV4cG9ydCBSRUdJU1RSQVRJT05fT1BFTj1GYWxzZQpleHBvcnQgREJfTkFNRT0iJERBVEEvaGMuc3FsaXRlIgpleHBvcnQgU0VDVVJFX1BST1hZX1NTTF9IRUFERVI9IkhUVFBfWF9GT1JXQVJERURfUFJPVE8saHR0cHMiCmV4cG9ydCBTSVRFX05BTUU9IiR7U0lURV9OQU1FOi1IZWFsdGhjaGVja3N9IgpleHBvcnQgVVdTR0lfUFJPQ0VTU0VTPSIke1VXU0dJX1BST0NFU1NFUzotMn0iCmV4cG9ydCBMSVNURU5fUE9SVD0iJHtQT1JUOi04MDAwfSIKZXhwb3J0IFBZVEhPTlBBVEg9L29wdC9oZWFsdGhjaGVja3MKCiMgVGhlIGltYWdlJ3MgdXdzZ2kuaW5pIGhhcmQtY29kZXMgOjgwMDAuIEJpbmQgUmFpbHdheSdzIGluamVjdGVkICRQT1JUIGluc3RlYWQsIHNvIHRoZSBwbGF0Zm9ybQojIGhlYWx0aGNoZWNrICh3aGljaCBkaWFscyB0aGUgaW5qZWN0ZWQgcG9ydCkgYW5kIHRoZSBlZGdlIHByb3h5IGFncmVlLgpzZWQgInMvOjgwMDAvOiRMSVNURU5fUE9SVC8iIC9vcHQvaGVhbHRoY2hlY2tzL2RvY2tlci91d3NnaS5pbmkgPiAiJERBVEEvdXdzZ2kuaW5pIgoKY2F0ID4gIiREQVRBL2Jvb3RzdHJhcC5weSIgPDwnUFknCmltcG9ydCBobWFjCmltcG9ydCBvcwoKaW1wb3J0IGRqYW5nbwoKb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgImhjLnNldHRpbmdzIikKZGphbmdvLnNldHVwKCkKCmZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCmZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IFVzZXIKCmZyb20gaGMuYWNjb3VudHMubW9kZWxzIGltcG9ydCBQcm9qZWN0CmZyb20gaGMuYWNjb3VudHMudmlld3MgaW1wb3J0IF9tYWtlX3VzZXIKCmVtYWlsID0gb3MuZW52aXJvblsiSEVBTFRIQ0hFQ0tTX0FETUlOX0VNQUlMIl0uc3RyaXAoKS5sb3dlcigpCnBhc3N3b3JkID0gb3MuZW52aXJvblsiSEVBTFRIQ0hFQ0tTX0FETUlOX1BBU1NXT1JEIl0KCnVzZXIgPSBVc2VyLm9iamVjdHMuZmlsdGVyKGVtYWlsPWVtYWlsKS5maXJzdCgpCmlmIHVzZXIgaXMgTm9uZToKICAgIHVzZXIgPSBfbWFrZV91c2VyKGVtYWlsKQogICAgcHJpbnQoIltyYWlsd2F5XSBjcmVhdGVkIHN1cGVydXNlciIsIGVtYWlsKQp1c2VyLnNldF9wYXNzd29yZChwYXNzd29yZCkKdXNlci5pc19zdGFmZiA9IFRydWUKdXNlci5pc19zdXBlcnVzZXIgPSBUcnVlCnVzZXIuc2F2ZSgpCgpwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmZpbHRlcihvd25lcj11c2VyKS5vcmRlcl9ieSgiaWQiKS5maXJzdCgpCmlmIHByb2plY3QgaXMgTm9uZToKICAgIHByb2plY3QgPSBQcm9qZWN0KG93bmVyPXVzZXIpCiAgICBwcm9qZWN0LmJhZGdlX2tleSA9IHVzZXIudXNlcm5hbWUKcHJvamVjdC5uYW1lID0gcHJvamVjdC5uYW1lIG9yICJEZWZhdWx0IgoKIyBBIHJlYWQtd3JpdGUgQVBJIGtleSBhbiBhZ2VudCBjYW4gdXNlIHdpdGhvdXQgb3BlbmluZyBhIGJyb3dzZXIuIEhlYWx0aGNoZWNrcyB2NCBzdG9yZXMKIyBhcGlfa2V5IGFzIDxmaXJzdCA4IHNlY3JldCBjaGFycz4uPEhNQUMtU0hBMjU2KFNFQ1JFVF9LRVksIGtleSk+OyByZWNvbXB1dGVkIGV2ZXJ5IGJvb3Qgc28gaXQKIyBhbHdheXMgbWF0Y2hlcyB0aGUgSEVBTFRIQ0hFQ0tTX0FQSV9LRVkgdmFyaWFibGUgKGFuZCBTRUNSRVRfS0VZKSBvZiB0aGlzIGRlcGxveS4Ka2V5ID0gb3MuZW52aXJvbi5nZXQoIkhFQUxUSENIRUNLU19BUElfS0VZIiwgIiIpCmlmIGxlbihrZXkpID09IDMyIGFuZCBrZXkuc3RhcnRzd2l0aCgiaGN3XyIpOgogICAgZGlnZXN0ID0gaG1hYy5kaWdlc3Qoc2V0dGluZ3MuU0VDUkVUX0tFWS5lbmNvZGUoKSwga2V5LmVuY29kZSgpLCAic2hhMjU2IikKICAgIHByb2plY3QuYXBpX2tleSA9IGtleVs0OjEyXSArICIuIiArIGRpZ2VzdC5oZXgoKQogICAgcHJpbnQoIltyYWlsd2F5XSBwcm9qZWN0IEFQSSBrZXkgc2V0IGZvciIsIGVtYWlsKQplbHNlOgogICAgcHJpbnQoIltyYWlsd2F5XSBIRUFMVEhDSEVDS1NfQVBJX0tFWSBtaXNzaW5nIG9yIG5vdCBhIDMyLWNoYXIgaGN3XyBrZXk7IEFQSSBrZXkgbm90IHNldCIpCnByb2plY3Quc2F2ZSgpClBZCmNob3duIDk5OTo5OTkgIiREQVRBL2Jvb3RzdHJhcC5weSIgIiREQVRBL3V3c2dpLmluaSIKCmNkIC9vcHQvaGVhbHRoY2hlY2tzCmV4ZWMgc2V0cHJpdiAtLXJldWlkPTk5OSAtLXJlZ2lkPTk5OSAtLWNsZWFyLWdyb3VwcyBzaCAtYyBcCiAgJy4vbWFuYWdlLnB5IG1pZ3JhdGUgLS1ub2lucHV0ICYmIHB5dGhvbiAiJDAiICYmIGV4ZWMgdXdzZ2kgIiQxIicgXAogICIkREFUQS9ib290c3RyYXAucHkiICIkREFUQS91d3NnaS5pbmkiCg== | base64 -d)"'`
- **Health check:** /accounts/login/
- **Public domain:** Yes

## Documentation

# Deploy and Host Healthchecks on Railway

**Built for an LLM agent to deploy and use.** There is no manual deploy step and nothing to fill in: the login, the Django secret and a read-write API key are generated at deploy time, the contract below lists every URL and variable name, and one working call creates a check and pings it. An agent reads its variables, runs the curl, and is monitoring cron jobs.

Healthchecks is an open-source cron job and background task monitor. Your jobs ping a URL when they run; if a ping is late or never arrives, Healthchecks raises the alarm. This template runs the official image with a persistent SQLite volume, registration closed, and a ready superuser and project API key.

## About Hosting Healthchecks

This template runs the official `healthchecks/healthchecks` image (pinned by digest) as one service. SQLite lives on a volume at `/data`, so checks and ping history survive redeploys. At every boot a small wrapper prepares the root-owned volume, runs migrations, then creates the superuser if it does not exist and sets the project API key from the generated `HEALTHCHECKS_API_KEY` variable (so it is the same after every redeploy). `DEBUG` is off, `REGISTRATION_OPEN` is off, `ALLOWED_HOSTS` and `SITE_ROOT` are wired from the public domain, and uWSGI binds Railway's `$PORT`.

Agent contract:

- Site URL variable: `SITE_ROOT` (`https://`)
- Admin login: `HEALTHCHECKS_ADMIN_EMAIL` and `HEALTHCHECKS_ADMIN_PASSWORD` (sign in at `/accounts/login/`)
- Project API key variable: `HEALTHCHECKS_API_KEY` (read-write, send as the `X-Api-Key` header)
- Django secret variable: `SECRET_KEY` (generated, keep it stable: API keys are hashed with it)
- Health path: `/accounts/login/` (open, returns 200); `/api/v3/status/` also answers `OK` after a database query
- Create a check: `POST /api/v3/checks/`; ping it at the returned `ping_url` (`GET`, `POST`, `/start`, `/fail`)

```bash
# 1. create a check that expects a ping every hour (idempotent: "unique":["name"])
curl -s -X POST "$SITE_ROOT/api/v3/checks/" \
  -H "X-Api-Key: $HEALTHCHECKS_API_KEY" -H 'Content-Type: application/json' \
  -d '{"name":"nightly-backup","timeout":3600,"grace":600,"unique":["name"]}'
# 2. ping the "ping_url" from that response from your job
curl -s "$SITE_ROOT/ping/"   # -&gt; OK, check status becomes "up"
```

Email alerts need an SMTP server, which only you can supply: add `EMAIL_HOST`, `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD` and `DEFAULT_FROM_EMAIL` as optional variables. Webhook, Slack, Discord, Telegram and the other integrations work without it.

## Why Deploy Healthchecks on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Healthchecks on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

- **Agent-ready** — generated credentials, a contract block and one working call; no browser step.
- **Secure by default** — registration is closed and the API rejects any other key with 401.
- **Data survives redeploys** — the volume is preconfigured and verified with a write, redeploy, read.
- **Zero configuration** — no variables to fill in; every host and secret is wired for you.

## Common Use Cases

- **Cron job monitoring** — get alerted when a backup, report or sync does not run on time.
- **AI agent heartbeats** — have long-running agents and scheduled pipelines ping in, and fail loudly when they stop.
- **CI and deploy pipelines** — signal start, success and failure of builds and releases with `/start` and `/fail` pings.

## Dependencies for Healthchecks Hosting

- A volume mounted at `/data` (included in this template).

### Deployment Dependencies

- [healthchecks/healthchecks](https://github.com/healthchecks/healthchecks) — upstream project
- [healthchecks on Docker Hub](https://hub.docker.com/r/healthchecks/healthchecks) — the pinned image this template deploys


## Similar templates

- [Rootprint](https://railway.com/deploy/rootprint-1) — Open-source logs and traces with full-text search on object-storage.
- [VPS Fleet Watch Hub with Beszel](https://railway.com/deploy/vps-fleet-watch-hub-with-beszel) — A persistent Beszel hub for external VPS agents and fleet alerts.
- [Pyroscope profiling](https://railway.com/deploy/pyroscope-profiling) — Protected continuous profiling with durable Pyroscope storage.

Open this page in a browser: https://railway.com/deploy/healthchecks-or-just-updated-cron-job-mo
