Create a check in the dashboard to get a unique ping URL. Then it's a single line in your code.
*/5 * * * * my-job && curl -fsS -m 10 https://ping.cronalive.com/<uuid> > /dev/null
[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 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');
pip install cronalive
@cronalive.monitor('<uuid>')
def nightly_job(): ...
# or the CLI wrapper:
cronalive run --id <uuid> -- /usr/local/bin/backup.sh npm i cronalive
import { monitored } from 'cronalive';
await monitored('<uuid>', () => runJob()); /<uuid> — success;/<uuid>/start — job started (enables duration tracking);/<uuid>/fail — explicit failure;/<uuid>/<code> — exit status 0–255 (0 = success), systemd $EXIT_STATUS compatible;/<uuid>/log — record without a status change.A POST body (up to 100 KB) is stored in the ping log.
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/Moscow"
create=1 and the schedule parameters are ignored — the ping simply counts; the schedule changes only via the dashboard or the API;
There are multiple ping domains; dashboard snippets include a
fallback automatically, and SDKs fetch the current list from
GET /api/v1/ping-domains.
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