Cron Monitors

Cron Monitors

Cron monitors let you track whether your scheduled jobs and recurring tasks are actually running. Create a monitor, ping it from your cron job, and Tindra alerts you when a job is late, fails, or stops running entirely.

Tindra cron monitors

Creating a monitor

Go to Monitors in the sidebar and click New Monitor.

Field Description
Name A human-readable label for the job
Schedule A cron expression (e.g., 0 3 * * * for 3 AM daily)
Grace period Seconds after the expected time before marking as missed (default: 300)
Project Which project this monitor belongs to

Tindra parses the cron expression and shows a human-readable summary ("Every day at 03:00") alongside the next expected execution time.

Pinging the monitor

After creating a monitor, copy the ping URL from the monitor detail page. Several check-in protocols are supported.

Simple ping (GET or POST)

The simplest integration. Call the URL when your job runs:

# Signal success
curl https://acme.tindra.sh/api/cron/{monitorID}?status=ok

# Signal failure
curl https://acme.tindra.sh/api/cron/{monitorID}?status=error

# Include duration in milliseconds
curl "https://acme.tindra.sh/api/cron/{monitorID}?status=ok&duration=4200"

Works with any language, any scheduler. Add it to your crontab:

0 3 * * * /usr/local/bin/backup.sh && curl -s "https://acme.tindra.sh/api/cron/your-monitor-id?status=ok" || curl -s "https://acme.tindra.sh/api/cron/your-monitor-id?status=error"

Sentry Crons SDK

If you're using the Sentry SDK with cron monitoring support, point the DSN at Tindra and it works without changes:

# Python example
with sentry_sdk.monitor(monitor_slug='my-monitor'):
    run_my_job()
// PHP example
$checkIn = Sentry\captureCheckIn(
    slug: 'my-monitor',
    status: Sentry\CheckInStatus::inProgress(),
);

run_my_job();

Sentry\captureCheckIn(
    slug: 'my-monitor',
    status: Sentry\CheckInStatus::ok(),
    checkInId: $checkIn,
);

Spatie Laravel Schedule Monitor / Oh Dear

The Spatie laravel-schedule-monitor package and Oh Dear's monitoring protocol are compatible out of the box. Set the ping URL to:

https://acme.tindra.sh/api/cron/{monitorID}

The /starting, /finished, and /failed sub-paths are all handled.

Monitor states

State Meaning
ok Last check-in completed successfully
in_progress Job started but hasn't finished yet
missed No check-in received within the grace period after the expected time
error Job reported a failure via ?status=error
unknown No check-ins received yet

Check-in history

The monitor detail page shows the last 20 check-ins as a visual timeline. Each entry shows status, duration (if provided), environment, and timestamp.

Alerts

Cron monitors integrate with alert rules. Add a Cron missed or Cron error condition to an existing rule to get notified via email, Slack, Discord, or webhook when a job goes wrong.

Pausing a monitor

If you're deploying and want to suppress missed alerts during a maintenance window, pause the monitor from the detail page. Tindra will not fire alerts while a monitor is paused, and check-ins during that period are recorded but don't affect state.