How it works

1. Create a check. Give it a name and tell us how often you expect it to run — say, every 1 day with a 1-hour grace period.

2. Ping when your job runs. Add a request to the check's unique URL at the end of your job:

curl -fsS https://cronping.cronping-oren.workers.dev/ping/<your-check-id>

3. Relax. Each ping resets the clock. If a ping doesn't arrive within the period + grace, the check goes DOWN and we email you. When pings resume, you get an UP recovery notice.

Alerts your way. Every check emails you by default. Paste a Slack, Discord, or generic webhook URL on any check and DOWN / FAIL / recovery alerts post there too — no config, works out of the box.

Works with anything that can make an HTTP request

cron, systemd timers, Kubernetes CronJobs, GitHub Actions, Windows Task Scheduler, backup tools, ETL pipelines, AI agent loops — if it can run curl or wget or open a URL, it can ping Cronping.

Three signals, same URL:

POST any of them with a short body (exit code, row count, error message) and it's attached to the event.

./run-job.sh && curl -fsS https://cronping.cronping-oren.workers.dev/ping/<id> || curl -fsS https://cronping.cronping-oren.workers.dev/ping/<id>/fail

Copy-paste examples

Crontab — ping after a nightly backup:

0 3 * * * /usr/local/bin/backup.sh && curl -fsS https://cronping.cronping-oren.workers.dev/ping/<id>

GitHub Actions — confirm a scheduled workflow ran:

- run: curl -fsS https://cronping.cronping-oren.workers.dev/ping/<id>

Python — wrap a job with success/fail signals:

import urllib.request u = "https://cronping.cronping-oren.workers.dev/ping/<id>" try: do_work() urllib.request.urlopen(u) except Exception: urllib.request.urlopen(u + "/fail")

systemd timer — add to the service's ExecStartPost:

ExecStartPost=/usr/bin/curl -fsS https://cronping.cronping-oren.workers.dev/ping/<id>
Get started free