okvpn/cron-bundle
Symfony bundle for scheduling and managing cron jobs in PHP. Define tasks in configuration or annotations, run console commands on schedules, and use locking, logging, and process management to prevent overlaps and track execution.
Architecture fit. okvpn/cron-bundle is a Symfony bundle, not a Laravel package. It assumes a Symfony kernel, its service container, console commands, and (per its design) Doctrine for persisting cron job state. It is architecturally incompatible with Laravel's container, Eloquent/ORM, and Artisan scheduler by default. Adopting it in a Laravel codebase means either co-hosting a Symfony app or writing a non-trivial adapter — neither is a TPM-level "drop-in" decision.
Integration feasibility. Low for a Laravel-primary stack. The bundle's value proposition — a long-lived PHP process that polls a schedule, enforces locking, and optionally offloads tasks to a message queue — overlaps almost entirely with Laravel's first-party Schedule facade plus queues + Horizon. The differentiating features (Docker-friendly daemon instead of system crontab, DB-backed job tracking) are real, but Laravel teams usually get equivalent behavior from schedule:work in a container and withoutOverlapping().
Technical risk. High for the size of the dependency:
0 dependents means no public battle-testing; failure modes are undocumented in the wild.Key questions to answer before any commitment:
schedule:work + queues that this bundle provides?Stack fit. Poor for Laravel; reasonable for Symfony 5/6-era apps that need to escape system crontab in containerized environments. For Laravel, the correct comparison is the native Illuminate\Console\Scheduling\Schedule + schedule:work (or schedule:run via a supervisor-managed worker), paired with Laravel queues and withoutOverlapping() / onOneServer() for locking.
Migration path (if Symfony is in scope). Replace system crontab entries with bundle-registered console commands in config/packages/okvpn_cron.yaml; introduce the Doctrine schema for job state; run the scheduler as a supervisor/systemd-managed daemon inside the container; enable queue offload only after the in-process path is proven.
Migration path (if Laravel is in scope). Do not adopt. Instead:
routes/console.php (Laravel 11+) or Kernel::schedule.withoutOverlapping()->onOneServer() backed by the cache lock driver.php artisan schedule:work as a container sidecar or supervisor process.Compatibility. Confirm against the target PHP version and Symfony major (the 2023 release implies Symfony 5.4/6.x territory). Cross-check the Doctrine ORM version constraint — this is the most likely conflict point in a modern stack. Verify container base image (Alpine vs. Debian) and whether the long-lived process survives SIGTERM gracefully.
Sequencing. If pursued at all:
Maintenance. The dominant risk. A single-maintainer package with no releases since Aug 2023 and zero dependents is effectively unmaintained for planning purposes. Treat any adoption as "we fork and own it," not "we consume it." Budget for a named internal owner and a quarterly review of upstream activity.
Support. No commercial support, no vendor SLA, community-only via GitHub issues. Escalation path is internal engineering. Document a fallback plan (revert to native scheduler) in the runbook.
Scaling. The design explicitly targets scaling via parallel workers and message-queue offload, which is sound. The bottleneck becomes the state store: every tick hits the database for job state, locking, and last-run bookkeeping. At high schedule density, expect DB contention on the lock table; plan for a dedicated schema/indexes and monitor lock wait times. Queue offload scales the execution but not the scheduling loop — the scheduler remains a single instance unless you shard schedules.
Failure modes to model and monitor:
Ramp-up. Low code volume but specialized context. Engineers need familiarity with Symfony's console/DI model, Doctrine schema migrations, supervisor/systemd process management, and broker semantics. Estimate a 3–5 day ramp for a senior PHP engineer new to the bundle, plus additional time if the Laravel-vs-Symfony context switch is in play. Total cost of ownership is dominated by maintenance and fork overhead, not initial integration.
Recommendation. Score of 0.34 with 18 stars and 0 dependents is consistent with "evaluate, do not adopt" for a Laravel stack. Use this package as a reference design for Docker-friendly scheduling, and implement the same pattern with Laravel's native scheduler and queue primitives. Revisit only if the organization standardizes on Symfony or commits an owner to maintain a fork.
How can I help you explore Laravel packages today?