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

Cron Bundle Laravel Package

mtamazlicaru/cron-bundle

A Symfony bundle for defining and running scheduled cron jobs in PHP applications. Configure recurring console commands, let the bundle handle due-job execution, and keep background tasks organized alongside your application code.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — mismatch at the framework boundary. The catalog entry lists this as a Laravel/PHP package; the source is SbkCronBundle, a Symfony bundle. Its integration surface is Symfony-specific: a Bundle subclass registered in bundles.php, a DependencyInjection extension, compiler passes, and console commands on symfony/console. Laravel has no loading path for any of that — no service provider, no config/ publish tag, no package auto-discovery, no binding into Illuminate\Console\Scheduling\Schedule. From a TPM's seat this is the single most important finding: the evaluation is not "is this good software?" but "does this artifact apply to our stack at all?" It does not. If the estate is Laravel, the decision closes here and the remaining sections are contingency analysis only.

Integration feasibility — low, and the cost is not repaid. Three paths exist. (1) Co-process: stand up a second, Symfony-based scheduler application next to the Laravel app — a second runtime, second deploy pipeline, second config surface, and a second on-call runbook, all to obtain a capability Laravel already ships. (2) Port: extract the config-parsing and dispatch logic and re-register it against Laravel's native scheduler. That is a rewrite with the package as a design reference, so the dependency never actually enters the tree — and if we are rewriting anyway, we should write it natively and own it cleanly. (3) Do not adopt: use Schedule::command(), ->cron(), ->withoutOverlapping(), ->onOneServer(), and ->runInBackground() behind one * * * * * php artisan schedule:run crontab line. Option 3 delivers the stated value proposition — "configure cron jobs in configuration files" — with zero third-party surface.

Technical risk — high, and concentrated in dependency resolution. Score 0, no stars reported, zero dependents. No downstream consumers means no battle-testing, no crowd-sourced CVE response, and no one else to find the bugs first. A Symfony-2/3-era bundle will constrain symfony/console, symfony/framework-bundle, psr/container, and PHP versions that almost certainly conflict with the symfony/* ^6/^7 constraints a current Laravel release carries. Practical outcome: Composer either fails resolution outright or forces a downgrade across shared framework components. That converts a scheduling convenience into a framework-upgrade blocker. There is no visible CI, test suite, security policy, or release cadence — treat this as an unmaintained source snapshot, not a dependency.

Key questions to resolve before any decision. These are the items I would put to the requester and to engineering, not answer myself:

  • What are the declared composer.json constraints (PHP, Symfony, PSR)? Does it resolve against our Laravel version without --ignore-platform-reqs?
  • Last commit date and whether any tagged release exists.
  • Does it mutate the system crontab, or run its own long-lived dispatcher loop? This defines the entire operational model and our rollback story.
  • Concurrency semantics: locking, overlap prevention, multi-node coordination.
  • Timezone and DST handling, exit-code propagation, failure notification.
  • Is there any documentation beyond the README?

Integration Approach

Stack fit — none natively, and no bridge in the repository. Laravel resolves packages through illuminate/support auto-discovery; this bundle expects Symfony\Component\HttpKernel\Bundle\Bundle registration. Nothing here adapts one to the other.

Migration path — adopt the pattern, not the package. If the team values declarative, version-controlled schedules (and they should), port that pattern onto native tooling:

  1. Define jobs in config/schedules.php (or YAML loaded at boot) with expression, command, timeout, overlap, on_one_server flags.
  2. Register them in a ScheduleServiceProvider by iterating the config into the native Schedule API.
  3. Keep a single crontab entry: * * * * * cd /app && php artisan schedule:run >> /dev/null 2>&1.

This yields identical capability — schedule-as-code, reviewable in PRs, portable into containers — with zero third-party risk and full access to onOneServer(), withoutOverlapping(), runInBackground(), and lifecycle hooks.

Compatibility — verify before committing engineering time. Run composer require mtamazlicaru/cron-bundle --dry-run in a scratch project pinned to our PHP and Laravel versions. If it resolves only via --ignore-platform-reqs or by pinning shared Symfony components, that alone is disqualifying: it puts the whole framework's dependency tree at risk for a feature we already have.

Sequencing.

  1. Days 1–2 — spike. Attempt resolution in a throwaway project; read the source end to end; document what it actually does versus what the README claims. Timeboxed, no production intent.
  2. Day 3 — decision gate. If it does not resolve cleanly and offer something the native scheduler lacks, close it out and record the rationale.
  3. Week 2 — implement natively. Build the config-driven schedule loader in-house (roughly 1–2 engineer-days) with tests.
  4. Week 3 — verify and decommission. Confirm parity in staging, retire any interim cron entries, update the runbook.

Note on ordering: sequence step 1 before any dependency-review or procurement motion. There is no point spending governance cycles on a package that will not install.

Operational Impact

Maintenance — we become the maintainer. With no upstream activity, every bug, PHP-version break, and security finding is ours to patch in a fork. That is a permanent ownership line item, small but real, and it must be visible on the dependency-review list or it silently becomes technical debt that blocks a framework upgrade eighteen months from now.

Support — effectively zero. No stars, no dependents, no issue history to mine for known failure modes. Onboarding cost is genuinely source-reading cost, which means internal documentation is mandatory if adopted, and the bus factor is one.

Scaling — the multi-node story is the open question. If the bundle shells out to crontab, it scales only as far as per-host crontabs do; a multi-instance deploy produces duplicate executions unless an external lock (Redis, database) is bolted on. If it runs an in-process dispatcher, it needs leader election to avoid N-fold duplication. Laravel's onOneServer() solves this out of the box via a cache lock — a concrete, load-bearing argument for the native path, and the one I would lead with when the auto-scaling milestone comes up on the roadmap.

Failure modes to watch.

  • Silent schedule drift — if the dispatching process dies, jobs stop with no alert. No health endpoint or metric is exposed.
  • Double execution — overlapping runs on multiple nodes, or slow jobs exceeding their interval.
  • DST/timezone skew — cron expression evaluation against a mismatched timezone shifts jobs by an hour twice a year.
  • Crontab pollution — if it mutates the system crontab, deploys stop being idempotent and rollbacks become manual.
  • Dependency erosion — a pinned, aging Symfony component quietly blocks framework upgrades long after the adoption rationale is forgotten.

Ramp-up. A mid-level engineer reads and understands the bundle in about a day. The costly ramp-up is organizational: getting a team comfortable owning an unreachable author's fork, and getting on-call fluent in a scheduling mechanism that differs from everywhere else in the estate.

TPM recommendation. Do not adopt. The package solves a solved problem in the target stack, carries no adoption signal, and presents a near-certain dependency conflict. Approve the two-day spike to validate that conclusion with evidence, then fund the ~2-day native implementation of the declarative-schedule pattern. That captures the strategic benefit — schedules as reviewable, deployable artifacts that survive containerization — while keeping our dependency surface clean and our upgrade path unblocked.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager