halloverden/symfony-scheduled-task-bundle
A Symfony bundle for defining and running scheduled tasks using Symfony's scheduler and messenger components, with attribute-based task configuration and a clean integration into your existing Symfony application.
symfony/messenger. It supports decisions like "should this nightly reconciliation / digest email / stale-record cleanup / cache warm / webhook retry loop be a scheduled message instead of a bespoke console command wired into crontab?"bin/console commands, (b) a bundle like this that emits Messenger messages on a schedule, or (c) Symfony's own native Scheduler component. This is the central PM decision the package informs.Consider it when:
Illuminate\Console\Scheduling and stop here).symfony/messenger in production, with workers, transports, and retry/dead-letter behaviour you trust. The bundle's value is entirely leverage on infrastructure you already paid for.Look elsewhere when:
Scheduler component covers recurring messages, cron expressions (dragonmantank/cron-expression), and Messenger integration with first-party support and a documented upgrade path. Adopting a 5-star bundle over a core component is a hard sell.For executives: This is a small, MIT-licensed open-source component that lets our Symfony application schedule recurring background jobs — nightly syncs, digest emails, cleanups — by pushing messages onto the job queue we already operate. It is not a new platform; it is glue. The strategic case is avoided cost: it replaces scattered crontab entries and one-off console commands with a single, inspectable convention, which reduces the operational surface area our team has to reason about. The honest caveat is maturity: it has minimal adoption (single-digit stars, no known dependents), so we should treat it as a vendored utility we own and can replace, not a vendor relationship. Estimated integration effort is days, not weeks; estimated exit cost is similarly small, which is exactly why the risk is acceptable for a first iteration.
For engineering: It maps cron expressions to Messenger dispatches, so scheduled work inherits your existing transport, retry, and failure handling — no parallel execution model. The decision to make is whether we adopt this or move to Symfony's native Scheduler component; for anything on 6.3+ the native component wins on support and longevity, and this bundle's main justification is legacy-version inertia or a preference for bundle-style configuration. If we adopt, we pin the version, read the source before merging (it is small), add a test that asserts each scheduled task dispatches the expected message, and document the fallback. Do not let this become the place where locking, missed-run alerting, or multi-node coordination get quietly bolted on — those are separate, explicit decisions.
How can I help you explore Laravel packages today?