From d8493083f0f435c92ae81d9411ad1a2fafcbd868 Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Fri, 16 Oct 2026 17:57:12 -0700 Subject: [PATCH 1/2] docs(php): Document Symfony Scheduler monitor configs Co-Authored-By: Claude --- platform-includes/crons/setup/php.symfony.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platform-includes/crons/setup/php.symfony.mdx b/platform-includes/crons/setup/php.symfony.mdx index 3b492c0b487d3..670dafedec05f 100644 --- a/platform-includes/crons/setup/php.symfony.mdx +++ b/platform-includes/crons/setup/php.symfony.mdx @@ -18,6 +18,14 @@ sentry: The monitor slug is the schedule name, a name for the message, and the ID that Symfony gives the recurring message, for example `default-app-send-report-1a2b3c4d`. The name is the command for scheduled console commands, the service and method for scheduled services, and the class name for other messages. The ID changes when the message or its schedule changes, which creates a new monitor. +Sentry creates each monitor from the message's schedule on its first check-in: + +- `RecurringMessage::cron()` and `#[AsCronTask]` send the cron expression and its timezone. +- `RecurringMessage::every()` and `#[AsPeriodicTask]` send the interval when it's a whole number of minutes. +- A jitter widens the check-in margin to cover it. + +For schedules that can't be expressed in the Crons schedule format (for example, a message that runs every 10 seconds), triggers that skip runs, such as excluded time ranges, and custom triggers, the SDK sends check-ins without a schedule, and you need to create the monitor in Sentry with the same slug. + `RedispatchMessage` isn't monitored; the message it redispatches is monitored when a worker consumes it. Retried messages, cancelled runs, and messages of anonymous classes don't send check-ins. To skip some recurring messages, list them under `excluded_messages`. An entry matches the message class, the command name or full command of a scheduled console command, the `@service::method` of a scheduled service, or the monitor slug. Entries wrapped in slashes are regular expressions. From 816a40002c753de062c4fe3a05d3c3954414fbdb Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Thu, 29 Oct 2026 11:04:04 -0700 Subject: [PATCH 2/2] docs(crons): Symfony skips messages with unsupported schedules --- platform-includes/crons/setup/php.symfony.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform-includes/crons/setup/php.symfony.mdx b/platform-includes/crons/setup/php.symfony.mdx index f68de70b51b7e..494047f96a7a7 100644 --- a/platform-includes/crons/setup/php.symfony.mdx +++ b/platform-includes/crons/setup/php.symfony.mdx @@ -24,7 +24,7 @@ Sentry creates each monitor from the message's schedule on its first check-in: - `RecurringMessage::every()` and `#[AsPeriodicTask]` send the interval when it's a whole number of minutes. - A jitter widens the check-in margin to cover it. -For schedules that can't be expressed in the Crons schedule format (for example, a message that runs every 10 seconds), triggers that skip runs, such as excluded time ranges, and custom triggers, the SDK sends check-ins without a schedule, and you need to create the monitor in Sentry with the same slug. +For schedules that can't be expressed in the Crons schedule format (for example, a message that runs every 10 seconds), triggers that skip runs, such as excluded time ranges, and custom triggers, the SDK doesn't send check-ins. `RedispatchMessage` isn't monitored; the message it redispatches is monitored when a worker consumes it. Retried messages, cancelled runs, and messages of anonymous classes don't send check-ins.