jmose/command-scheduler-bundle
Symfony bundle for scheduling console commands with cron expressions. Define jobs in YAML, run due tasks via a single scheduler command, and track execution status and logs. A lightweight alternative to system cron for Symfony applications.
Architecture fit
jmose/command-scheduler-bundle is a Symfony bundle, not a Laravel package. v3.0.x adds Symfony 5 support; it does not add a service provider, facade, config publishing, or any awareness of Illuminate\Console\Scheduling\Schedule. The "Laravel" categorization in our tooling remains a tagging error.CronJob table, evaluates cron expressions, and spawns due commands as subprocesses. Architecturally analogous to Laravel's schedule:run, but independently implemented and Doctrine-coupled.schedule(). Real capability — but reproducible in ~200 lines on dragonmantank/cron-expression without inheriting the dependency.Integration feasibility
Technical risk
mtdowling/cron-expression with dragonmantank/cron-expression. This removes the day-one Composer collision that previously made the package unusable in any modern app. Verify the pinned constraint: if it resolves to ^1.0|^2.0, it still conflicts with the ^3.0 line that current Laravel and Symfony apps carry, and the blocker merely moves.merge() clears one ORM 3 migration obstacle. It does not constitute Doctrine 3 support; no such claim is made.Key questions
dragonmantank/cron-expression constraint resolve to ^3.0, or does it still collide with our stack? This is now the only remaining install-time blocker to check.Stack fit
withoutOverlapping(), onOneServer(), runInBackground(), environments(), and Schedule::command()->cron(). For dynamic schedules, compose dragonmantank/cron-expression with an Eloquent model and a single schedule:run tick. Add spatie/laravel-schedule-monitor for missed-run alerting.Migration path (Laravel, if capability is genuinely needed)
schedule() entry; classify by frequency, runtime, criticality.scheduled_jobs (name, command signature, cron expression, timezone, args JSON, without_overlapping, on_one_server, enabled, last_run_at, last_exit_code, next_run_at).* * * * * php artisan schedule:run entry — the only OS-level cron we maintain.CronExpression::isDue(), dispatch each as a queued job so a slow command cannot stall the tick.Cache::lock) and per-node deduplication.Compatibility
>= 7.1 constraint in 3.0.0), Doctrine ORM 2.x, optional Sonata Admin. Symfony 3.4/4.x support appears retained but should be confirmed against our constraint set before committing.Sequencing
Maintenance
mtdowling replacement work or the merge() deprecation. Symfony 5 support alone defers a fork by roughly one upgrade cycle.Support
@spajxo, @pwbdod, @phansys, @balabis) suggest a slightly wider contributor pool than previously assessed — mildly positive, but these are one-off patches, not a maintainership transition.Scaling
0 * * * * produces a thundering herd at exactly the wrong moment.Failure modes
composer update can install a version the maintainer has since retracted — or fail to resolve at all.last_exit_code and last_run_at staleness, failures persist unnoticed for days.var/log accumulate unbounded; disk-full takes down the whole application, not just scheduling.\DateTimeInterface::ATOM alters log and status-line formatting. If we feed these outputs into parsers or dashboards, validate them against v3.0.x before upgrading from 2.x.Ramp-up
How can I help you explore Laravel packages today?