Quick start
Create a check in the dashboard to get a unique ping URL. Then it's a single line in your code.
Want the step-by-step version — from a crontab line to the first alert: Cron job monitoring.
crontab
*/5 * * * * my-job && curl -fsS -m 10 https://ping.cronalive.com/<uuid> > /dev/null
systemd
[Service]
ExecStartPost=/usr/bin/curl -fsS -m 10 https://ping.cronalive.com/<uuid>
# or with the exit status (0 = success):
ExecStopPost=/usr/bin/curl -fsS https://ping.cronalive.com/<uuid>/$EXIT_STATUS Laravel
Laravel 10, 11, 12 and 13 · PHP 8.1+
composer require cronalive/laravel // routes/console.php $schedule->command('backup:run') ->daily() ->pingCronalive('<uuid>'); // or auto-provision a check by slug — no dashboard needed: $schedule->command('etl:run')->hourly()->pingCronaliveSlug('etl-run');
Python
pip install cronalive
@cronalive.monitor('<uuid>')
def nightly_job(): ...
# or the CLI wrapper:
cronalive run --id <uuid> -- /usr/local/bin/backup.sh Node
npm i cronalive
import { monitored } from 'cronalive';
await monitored('<uuid>', () => runJob()); Ping signals
/<uuid>— success;/<uuid>/start— job started (enables duration tracking);/<uuid>/fail— explicit failure;/<uuid>/<code>— exit status 0–255 (0 = success), systemd$EXIT_STATUScompatible;/<uuid>/log— record without a status change.
A POST body (up to 100 KB) is stored in the ping log.
Slug addressing & auto-provisioning
Ping by name instead of UUID:
https://ping.cronalive.com/<ping-key>/<slug>.
The first ping with ?create=1 creates the
check itself — handy in deploy scripts. The new check's schedule
comes from query parameters:
# simple period: period 60–31536000 s, grace 0–2592000 s curl "https://ping.cronalive.com/<ping-key>/etl-run?create=1&period=3600&grace=300" # or a cron expression with a timezone (tz defaults to UTC) curl "https://ping.cronalive.com/<ping-key>/backup?create=1&cron=30+3+*+*+*&tz=Europe/Berlin"
- with no parameters the project defaults apply (a one-day period and a one-hour grace out of the box; configurable in the dashboard under Projects → Auto-provisioning);
- idempotency: for an existing check
create=1and the schedule parameters are ignored — the ping simply counts; the schedule changes only via the dashboard or the API; - a grace below 30 seconds is raised to 30 automatically and the check is still created — scheduler jitter of a few seconds would otherwise show up as false alerts (details);
- invalid parameters — 400; the plan's check limit exceeded — 403; auto-provisioning disabled for the project — 404.
Where to find the ping key. In the dashboard:
Projects → Ping key — with Show and Copy buttons and a
ready-made slug URL example. SDKs read the key from the
CRONALIVE_PING_KEY env variable.
UUID pings do not use the key.
Rotation. If the key leaks, the project owner can
rotate it in the same place (Projects → Ping key →
Rotate key). Old slug URLs stop being accepted
immediately (404) — update
CRONALIVE_PING_KEY in your job
environments. UUID pings are not affected.
Ping delivery resilience
There are multiple ping domains; dashboard snippets include a
fallback automatically, and SDKs fetch the current list from
GET /api/v1/ping-domains.
REST API
Full reference — API Reference
(openapi.yaml). Authenticate with a
project key: read-write (ca_rw_…)
for management, read-only (ca_ro_…)
for reads. Issue keys in the dashboard under Projects →
API keys; a key is shown once, only its hash is stored.
curl -H "Authorization: Bearer ca_ro_..." \ https://app.cronalive.com/api/v1/checks
All guides
- Cron job monitoring — step by step: check, crontab, first ping, alerts;
- Snippets — bash, Python, Node, PHP, Laravel, systemd, GitHub Actions;
- /start, /fail and duration — ping suffixes, runtime, creating a check by slug;
- Ping reliability — timeouts, retries, fallback domains, limits;
- Cron cheat sheet — syntax, patterns, common mistakes, OnCalendar;
- Statuses and lifecycle — new, up, late, down, paused, grace, flap damping;
- HTTP checks — polling a URL, regions, the TLS badge and SSL alerts;
- Telegram alerts, Slack / Discord / Mattermost, Email / SMS / PagerDuty, Webhooks — notification channels;
- Status badges — public status for a README or a wiki;
- API Reference — REST API v1 and the OpenAPI spec.