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

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Verdict: Do not adopt as a direct Laravel dependency. Evaluate only as a standalone scheduler pattern, or treat it as a reference implementation. The package is technically coherent but structurally mismatched to the Laravel ecosystem and carries adoption risk that outweighs its feature surface.

Architecture fit

  • This is a Symfony FrameworkBundle bundle, not a Laravel package. It assumes a Symfony kernel, DI container, bundle registration in config/bundles.php, and console commands discovered through the container. Laravel has no equivalent bundle/extension registration contract, so "install and go" does not exist here.
  • Its core value proposition — declaring scheduled console commands and rendering/writing the host crontab — overlaps almost entirely with Laravel's native scheduler (Schedule::command() in routes/console.php) plus a single * * * * * php artisan schedule:run entry. Laravel already owns this problem idiomatically.
  • The only differentiated capability is programmatic crontab installation (dumping and writing crontab lines from declared jobs). In modern deployment targets this is a liability, not a feature: containers, ECS, Kubernetes, and PaaS runtimes generally have no cron daemon, no write access to the host crontab, or both.
  • Net: high conceptual overlap with an existing, first-party, zero-risk solution, and a framework boundary that must be bridged rather than integrated.

Integration feasibility

  • Technically possible: Laravel's artisan is built on Symfony Console, so a Symfony Application can be booted inside a Laravel app or a sibling console entrypoint. Practically, the bundle's dependency on FrameworkBundle's DI, config loading, and annotation/attribute discovery means you would hand-wire a second container — a maintenance burden with no product payoff.
  • Cleaner paths, in order of preference: (1) do not integrate — implement the same behavior with Laravel Scheduler and a distributed lock (withoutOverlapping() + cache lock); (2) run it as an isolated standalone Symfony console app or sidecar, coupled to Laravel only through the CLI commands it invokes; (3) fork the crontab-rendering logic into a small internal package if that specific capability is genuinely required.
  • Licensing is clean (MIT), so a fork or vendored subset is legally unencumbered — worth noting as an exit ramp.

Technical risk

  • Adoption risk (high): 11 stars and 0 dependents is effectively zero community validation. No third-party production usage means no battle-tested edge cases, no StackOverflow corpus, no hiring pool, and no ecosystem pressure to keep it current with Symfony/PHP releases.
  • Bus factor (high): single-maintainer project. Abandonment is the base case, not the tail case. Assume you own the code on day one.
  • Framework compatibility (medium): version constraints against Symfony 5/6/7 and PHP 8.x need verification; annotation support is deprecated in favor of attributes, so older docs in the repo may describe a dead API.
  • Operational risk (high): mutating the host crontab is irreversible-by-default, stateful, and host-local. Combined with zero execution observability (no run history, no success/failure telemetry, no alerting), failures are silent.
  • Security surface (medium): the package shells out to crontab and renders command strings from declared jobs. Validate quoting/escaping and whether job definitions can inject arbitrary shell.

Key questions

  • What does this give us that Schedule::command() does not, beyond writing the crontab file?
  • Where does this actually run? If the answer involves containers or managed compute, crontab-writing is disqualified.
  • Who is the named owner and on-call rotation for the scheduler if we adopt?
  • Is the reported last release date (2026-04-25) accurate, and does it correspond to a tagged, CI-passing release or a metadata artifact?
  • How many open issues/PRs, and what is the median merge latency over the last 12 months?
  • Who takes over the fork if the maintainer disappears in month three?

Integration Approach

Stack fit

  • Poor as a library dependency; acceptable as a standalone console application. Treat it as a binary boundary, not a Composer dependency pulled into the Laravel app.
  • If the requirement is genuinely "declarative cron job registry with crontab materialization," Laravel's scheduler already provides the registry; pair it with a config-driven crontab template rendered at deploy/provisioning time rather than at runtime.

Migration path

  • There is no migration to this package from Laravel Scheduler — it is a lateral move into a less-supported ecosystem. Any migration would be net-negative on maintainability.
  • There is a clean migration from this package if adopted: because job definitions are declarative, porting to Schedule::command() is a mechanical translation, and the crontab becomes a single static line. Keep that as the documented escape hatch.
  • Do not migrate existing scheduled work as part of an adoption decision; scope any trial to new, low-criticality jobs only.

Compatibility

  • Pin and test explicitly: PHP minor version, Symfony Console/FrameworkBundle majors, and ext-* requirements from composer.json.
  • Verify behavior under the target OS user's crontab, including whether the process has crontab in PATH and write permission to the spool.
  • Confirm timezone handling matches the app's APP_TIMEZONE; crontab respects system timezone, not application config — a classic silent bug.

Sequencing

  1. Requirements check: confirm the actual need is crontab materialization, not scheduling. If it is scheduling, stop here.
  2. Infrastructure check: confirm bare-metal or VM targets with a running cron daemon. Container/PaaS targets terminate the evaluation.
  3. Sandbox PoC: standalone Symfony app, three representative jobs, verify idempotent re-install (no duplicate lines), rollback behavior, and dry-run output.
  4. Ownership decision: if the PoC succeeds, formally fork to an internal namespace with CI, a PHP-version matrix, and a named maintainer before any production use.
  5. Otherwise, document the decision as "rejected — redundant with Laravel Scheduler" and move on.

Operational Impact

Maintenance

  • Expect to own the code. Budget as if it were an internal package from day one: vendored fork, dependency-bump CI, and a standing ticket for Symfony/PHP compatibility. At 11 stars, upstream fixes arrive on the maintainer's schedule, not yours.
  • Annotation-based configuration is a maintenance tax — PHP attributes are the current idiom, so a fork that modernizes this is likely required within a year.

Support

  • No vendor, no community, no paid tier. Support is "read the source." Plan for the on-call engineer to be able to read a Symfony bundle's DI config under incident conditions.
  • Knowledge concentration risk: one or two engineers will understand the crontab materialization logic. Document the install/dump/rollback procedure as a runbook, not tribal knowledge.

Scaling

  • Crontab is host-local and does not scale horizontally. On N replicas you get N executions unless you add a lock — and this package provides no distributed lock, no leader election, and no coordination primitive.
  • No queueing, no concurrency limits, no backpressure. Overlapping runs on long jobs are unhandled by default.
  • Every new host requires a provisioning step; the scheduler becomes coupled to infrastructure lifecycle, which is precisely what modern platforms abstract away.

Failure modes

  • Silent non-execution: cron daemon not running or not installed — no error, no metric, no alert.
  • Duplicate execution: multiple hosts or re-installs appending duplicate crontab lines; requires idempotency verification at every deploy.
  • Permission/path drift: deploy user changes, PATH differs under cron, PHP binary path breaks after upgrade.
  • Timezone/DST: double-fires or skipped runs around DST transitions and across mixed system/app timezones.
  • No observability: no run history, duration, exit-code capture, or retry semantics. Debugging means grepping mail spool or stdout redirects.
  • No rollback: a bad install leaves the host in an unknown crontab state; recovery is manual.

Ramp-up

  • Requires Symfony fluency — bundle registration, service definitions, attribute/annotation discovery, console application bootstrapping — which most Laravel teams do not have. Estimate 1–2 engineer-days for a competent Symfony developer to reach productivity, and roughly double for a Laravel-only developer.
  • Add time for the operational side: crontab semantics, provisioning automation, and the runbook. The tooling learning curve is the smaller half of the ramp.
  • Recommend a single spike owner and a written decision record either way, so the "why not just use the Laravel scheduler" question is answered once rather than every quarter.
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.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings