padam87/cron-bundle
Symfony bundle for defining and running cron jobs as annotated services. Schedule tasks with a simple @Cron annotation, prevent overlapping runs with locks, and execute jobs via a console command, keeping scheduled work organized, logged, and easy to test inside your Symfony app.
Important caveat before anything else: despite the "Laravel/PHP" framing, this is a Symfony bundle (CronBundle for symfony console). It is not designed for Laravel, and Laravel already ships a first-class scheduler. Treat any Laravel evaluation as "read the pattern, don't adopt the package."
With that framed, this package informs these decisions:
* * * * * php bin/console <dispatcher> entry with per-job expressions managed in code, or as N independent OS cron entries. This package bets on the former — better for containerized/12-factor deploys, easier to version with the app, easier to audit in code review.Consider it if:
Look elsewhere if:
For executives (30 seconds): This is a small, MIT-licensed utility that consolidates scheduled background work into a single deployable entry point instead of scattered crontab lines — marginally cheaper to operate and easier to audit. It is not a platform bet: adoption is unproven, the maintainer base is thin, and the switching cost is low because the code is small and permissively licensed. Recommended posture: tactical dependency at most, with an exit plan. For our Laravel services, the honest answer is that we already have this capability for free.
For engineering: It's a thin scheduling layer over Symfony Console — jobs and cron expressions live in config/code, one system cron invokes the dispatcher, the bundle decides what's due. MIT, forkable, small blast radius. Risks are maintenance continuity and the absence of any downstream validation, plus the usual cron gaps (no locking, no retries, no visibility without extra work). If we proceed, isolate it behind an internal Scheduler interface so job definitions survive a swap to Symfony Messenger, Laravel's scheduler, or systemd timers. If we're a Laravel shop, the recommendation is a 1–2 day spike to steal the pattern rather than take the dependency — and a decision to stay on the native scheduler.
How can I help you explore Laravel packages today?