Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Cronbundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What this actually is. Despite landing in a Laravel/PHP package request, kmj/cronbundle is a Symfony 2.x bundle. It plugs into AppKernel, the Symfony DI container, and bundle Extension wiring — extension points Laravel does not have and cannot emulate. Adopting it in a Laravel codebase is not an integration task; it is adopting a second framework's idioms inside your application.

Architecture fit — poor, and the mismatch is conceptual before it is technical. The package's defining behavior is rewriting a host's user crontab by shelling out to the crontab binary. That is a provisioning concern living outside the application boundary. Laravel's model is the inverse: schedules are declared in-app and executed by a single schedule:run tick installed once by infrastructure. The bundle moves scheduling out of the app and into host state — the opposite direction from where the framework, and the industry, has gone.

Integration feasibility — effectively infeasible, with a hard Composer stop. The bundle's symfony/symfony constraint sits in the ~2.x range; any supported Laravel release requires Symfony components at ^6/^7. That dependency graph is unsatisfiable without --ignore-platform-reqs hacks or a fork that rewrites constraints — and a fork means we inherit indefinite maintenance of privileged code. Symfony 2.x has been EOL since November 2018, so there is no upstream patch path even for the framework it targets.

Technical risk — high, concentrated in operational side effects rather than in code defects. The package mutates system state on a privileged path: the web/queue user needs crontab rights, which widens the blast radius of any application compromise. Known failure classes — partial writes, duplicate accumulation across deploys, clobbering entries owned by backup/monitoring/log-rotation tooling, quoting bugs in generated lines — are invisible to application-level tests. Maturity signals are uniformly negative: 3 stars, 0 dependents, no CI or security disclosure evidence, composite score 0.045.

Key questions I would put to the requester before any spike:

  • Is the requirement programmatic registration of jobs, or literally writing the crontab file? These have very different (and very differently priced) answers.
  • Are schedules static and known at deploy time, or tenant-dynamic and created at runtime?
  • What is the deployment topology — long-lived VMs, autoscaled containers, Kubernetes? Crontab semantics degrade or break in the latter two.
  • Is a live Symfony2 app already depending on this, or is this greenfield evaluation? If legacy, the work item is a funded exit plan, not an integration.
  • If we fork, who owns it, and is there a recurring maintenance line item?

Verdict: do not adopt. The correct TPM move is to treat this as a reference implementation for scheduling ergonomics and as evidence for a platform-standardization decision.

Integration Approach

Stack fit — use the native scheduler; do not bridge. Laravel's scheduler already covers what this bundle offers, with stronger guarantees: withoutOverlapping() for mutual exclusion, onOneServer() for multi-node fleets, before()/after() hooks, failure events, and output capture routed to logs. The one gap — writing the crontab — is correctly owned by infrastructure-as-code, not by application code. No adapter layer is worth writing; the surface area is small enough that reimplementing the definitions costs less than owning the bridge.

Migration paths, by case.

  1. Greenfield Laravel: no migration. Declare jobs in routes/console.php (Laravel 11+) or app/Console/Kernel.php, and provision one line — * * * * * cd /path && php artisan schedule:run >> /dev/null 2>&1 — through Ansible, cloud-init, Helm, Terraform, or a Docker entrypoint.
  2. Legacy Symfony2 app already on the bundle: freeze first, migrate second. Pin the dependency, containerize to capture the current PHP/Symfony versions, and extract the live crontab into configuration management before touching application code. Decommission the bundle only once the crontab is fully declarative and drift-detected.
  3. Dynamic per-tenant schedules: register schedules at boot from a database or config source and run schedule:run every minute with onOneServer(), or move to a durable dispatcher with delayed dispatch. Never write crontab for tenant data — an unbounded, drifting crontab file is a known scaling failure mode.

Compatibility baseline to assume. No PHP 8.x support, no symfony/* v5+, no Laravel 9+. Verify the license before any fork; a fork inherits the full maintenance obligation with no upstream to rebase onto.

Sequencing as a delivery plan.

  1. Confirm the requirement is scheduling, not crontab authorship — this decision gates everything downstream.
  2. Inventory every live cron entry with owner, frequency, and runtime.
  3. Declare those jobs in the native scheduler with overlap and single-server guards.
  4. Move cron installation into IaC; make it idempotent and drift-detected.
  5. Add a missed-run heartbeat alert before cutting over — do not migrate blind.
  6. Delete the crontab write path and the dependency from application code.

Operational Impact

Maintenance. Effectively zero upstream velocity. Every PHP or framework upgrade becomes an internal patch to unmaintained privileged code. Budget a named fork owner and a recurring maintenance line item, or avoid the cost entirely by not adopting — the license is free, but ownership is not.

Support. No vendor, no maintainer responsiveness signal, no CVE process, no peer community. Three stars and zero dependents mean no Stack Overflow corpus and no external expertise to lean on; the bus factor is one. All support is internal tribal knowledge, which is a hiring and onboarding constraint, not just an engineering one.

Scaling. The crontab is a per-host artifact — the wrong primitive for elastic infrastructure. On an autoscaled fleet, N instances each install the same crontab and every job fires N times, or the instances race to rewrite the file concurrently. Kubernetes and ECS have no natural home for it, so teams end up pinning a singleton node or adding a sidecar — reintroducing the original problem with more moving parts. onOneServer() plus a shared cache lock solves this inside the framework.

Failure modes to track in the risk register.

  • Silent non-execution — jobs stop being scheduled after a bad write, with no built-in alerting.
  • Duplicate entries — non-idempotent rewrites accumulate lines across deploys.
  • Collateral clobbering — the rewrite displaces entries owned by backup, monitoring, or log-rotation tooling.
  • Privilege expansion — the web/queue user needs crontab rights, widening the blast radius of any app compromise.
  • Drift — the live crontab diverges from source control and becomes undocumented production state.
  • Job overlap — long-running jobs stack up with no locking primitive.

Ramp-up. The API is small, so reading the code is cheap. The real cost is operational: every new engineer must learn an out-of-band scheduling mechanism that exists nowhere else in the stack, and must reverse-engineer why the crontab looks the way it does. That is a permanent tax on every future engineer versus a one-time cost of building on the native scheduler.

Stakeholder framing. Executives: the capability is worth building; this package is not worth owning. Adopting it ties a production scheduling path to an EOL framework and an unmaintained dependency with no security patch route — the true cost is permanent self-patching of a privileged crontab writer. The same need is met with framework-native scheduling at roughly one to two sprints, with zero new third-party risk. Engineering: treat it as a reference implementation for schedule-definition ergonomics; deliver with Laravel's scheduler or symfony/scheduler, keep definitions in the repo, generate-and-inspect rather than blindly overwrite host crontabs, and add "unmaintained dependency" as a standing architecture-review gate so this class of decision is caught before it reaches the backlog.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource