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.
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.