kmj/cronbundle
KMJ CronBundle is a Symfony bundle for defining and managing cron jobs in PHP applications. It provides console commands and configuration to schedule recurring tasks, run them from your codebase, and keep cron-based automation organized and maintainable.
symfony/scheduler) rather than a third-party bundle. Use it to settle the "which scheduler is standard?" conversation once.Consider it only under a narrow, tightly gated set of conditions — all of which must hold simultaneously:
Look elsewhere in essentially every other case:
| Situation | Better fit |
|---|---|
| Laravel 8+ / 11+ | Native scheduler (schedule:run, routes/console.php), dragonmantank/cron-expression for validation |
| Symfony 6.3+ | symfony/scheduler — same concept, maintained |
| No in-app scheduling needed | systemd timers, container/Kubernetes CronJob, cloud schedulers (EventBridge, Cloud Scheduler) |
| Only expression parsing/validation | Use the cron-expression library directly; don't adopt a crontab manager |
| Multi-tenant or horizontally scaled services | External scheduler + queue; host crontab writes do not survive autoscaling |
Treat as hard "no" blockers: no recent commits, no test/CI signal, no security policy, no active maintainer, and a crontab write path requiring privileged execution.
Recommendation: do not adopt. This is an unmaintained Symfony2-era bundle (3 stars, 0 dependents, health score 0.045) that solves a legitimate problem — version-controlled, app-owned scheduling — with an approach both major PHP frameworks have since absorbed natively.
For executives: the underlying capability is worth building; this package is not worth buying. Adopting it would tie a production scheduling path to an end-of-life framework and an unmaintained dependency with no route to security patches. Cost of ownership isn't the license (free) — it's the permanent burden of patching a privileged crontab writer ourselves, plus a permanent onboarding tax on every future engineer who must learn an out-of-band mechanism that exists nowhere else in the stack. We can meet the same need with framework-native scheduling plus infrastructure-as-code for roughly one to two sprints of engineering, with zero new third-party dependency risk.
For engineering: treat this as a reference implementation, not a dependency. Read it for the ergonomics of declaring schedules in code; then implement with Laravel's native scheduler (including withoutOverlapping() and onOneServer()) or symfony/scheduler, plus dragonmantank/cron-expression for validation. Keep schedule definitions in the repo, generate and diff rather than blindly overwrite host crontabs, and scope any crontab mutation to a dedicated least-privilege user. Sequence it safely: inventory existing jobs, declare them natively, move cron installation into IaC, add heartbeat alerting on schedule:run before removing the old mechanism, then delete the write path entirely.
How can I help you explore Laravel packages today?