Skip to main content
Cron Monitoring watches your scheduled jobs and background tasks. Instead of only knowing a job failed (or never ran), you get visibility into every execution: when it started, how long it took, whether it succeeded, and whether it ran on time.

How it works

Your job sends a check-in to Sentry when it starts and again when it finishes. Sentry compares those check-ins against the expected schedule and marks the run as ok, failed, missed, or timed out.

Check-in statuses

StatusWhat it means
in_progressThe job sent an opening check-in and is currently running
okThe job completed successfully
errorThe job explicitly reported a failure
missedNo check-in arrived within the expected window
timeoutThe job started (in_progress) but didn’t finish within max_runtime

Creating a monitor

1

Open Crons

In your Sentry project, navigate to Crons in the left sidebar.
2

Create a monitor

Click Add Monitor. Give it a name and a unique slug — you’ll use the slug in your check-in calls.
3

Configure the schedule

Choose a schedule type and set the expression:
  • Crontab: a standard 5-field cron expression (e.g. 0 * * * * for hourly)
  • Interval: a human-friendly interval (e.g. every 5 minutes, every 2 hours, every 1 day)
Supported interval units: minute, hour, day, week, month, year
4

Set tolerances (optional)

  • Check-in margin (checkin_margin): How many minutes after the expected time to wait before marking a run as missed. Useful for jobs that take a moment to start.
  • Max runtime (max_runtime): How many minutes a job can stay in_progress before Sentry marks it as timed out.
5

Save and instrument

Copy the monitor slug and add check-in calls to your job code (see below).

Sending check-ins

The SDK handles opening and closing check-ins automatically, and reports error status if an exception is raised.

Via HTTP API

You can also send check-ins directly to the Sentry API from any language or environment that can make HTTP requests.

Via DSN (upsert)

If you’d rather not create monitors in the UI first, you can upsert a monitor directly from your check-in payload using your project DSN. Include the full monitor config in the check-in envelope:
Python
Upsert check-ins create or update the monitor configuration automatically. This is useful when you manage monitors as code alongside your job definitions.

Schedule types

Crontab

Use standard 5-field cron syntax. Sentry also supports common aliases:
AliasEquivalent
@yearly / @annually0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily0 0 * * *
@hourly0 * * * *

Interval

Specify a count and a unit:

Alerting

By default, Sentry creates an issue whenever a monitor enters a failed state (missed, error, or timeout). You can configure additional alert rules to notify your team:
  • Email — send to specific team members or the issue assignee
  • Slack — post to a channel
  • PagerDuty — page on-call
  • Webhooks — call any HTTP endpoint
Configure alert rules under Settings > Alerts or directly from the monitor’s Alert Rules tab.
Use the failure_issue_threshold setting to require multiple consecutive failures before an issue is created. This reduces noise from transient failures in flaky jobs.

Environments

Each monitor tracks check-ins per environment. If the same job runs in production and staging, Sentry creates separate environment tracks under the same monitor. Set the environment in your check-in: