ibexa/cron
Exposes cron/cron for Ibexa and Symfony through the simple ibexa:cron:run command. Tag existing Symfony commands as cron jobs with schedules, optional categories, and custom options, then run them from system cron. A lightweight alternative to cron-bundle.
schedule and category declared in the repo, rather than a line someone SSH'd into a server to add. That supports the decision to make scheduling reviewable, diffable, and deployable — a governance win more than a technical one.* * * * * ibexa:cron:run) collapses dozens of system cron lines into a single OS-level entry. This is a real operational simplification for ops runbooks, container images, and environment parity (dev/staging/prod behaving identically).category. Categories let you split high-frequency, business-critical jobs from infrequent housekeeping, and run them under different system cron cadences or supervision. Useful when deciding which jobs deserve alerting and which can fail silently.cron/cron for parsing, a thin command for execution, Symfony's service container for registration. The decision it supports is deliberately deferring the scheduler investment.Illuminate\Console\Scheduling and a schedule:run entry point with overlapping (and more mature) semantics. Read this package as a design reference for how to expose scheduling, not as a library to install. That distinction is itself a product decision worth documenting.Consider it when all of the following hold:
cron/cron, and it earns its place only by saving you ~50 lines of glue you'd otherwise write yourself.Look elsewhere when:
cron/cron-bundle, or your platform's native primitives (Kubernetes CronJob with concurrencyPolicy: Forbid, systemd timers, cloud schedulers).NOASSERTION classification is a compliance flag, not a formality — legal review is a prerequisite before shipping this in a distributed product. Do not let it into a customer-facing build on the assumption it's "probably MIT."To executives — one paragraph: This is a small, low-cost piece of plumbing that lets our engineering team declare scheduled jobs in code instead of hand-editing server crontabs. The upside is operational: fewer places for drift to hide, schedules that get code review, and one cron entry per environment instead of dozens. The caveats are equally clear — it is an immature, vendor-published package with negligible community adoption, an unresolved license classification, and no built-in protection against the same job running twice when we scale to multiple servers. Recommendation: approve as an internal convenience inside our existing Ibexa/Symfony estate, capped at non-critical jobs, with legal sign-off on the license and no dependency on it for anything revenue-affecting. It is a tactical simplifying move, not a strategic platform bet.
To engineering — the short version: It's cron/cron plus a console command and a service tag. You tag a command with ibexa.cron.job, give it a crontab expression and a category, point system cron at ibexa:cron:run, and you're done. It buys you schedule-as-code and category-based tiering. It does not buy you locking, retries, history, or multi-node semantics — the README is explicit that cluster support and a lock system are planned, not present. If we're running more than one app node, we either add our own lock (e.g. a database or cache-based mutex wrapper) or we don't use this. It's ~a few hundred lines of surface area, so the exit cost is near zero, which is exactly why it's a reasonable experiment.
To the platform/ops team: The win is that your crontab shrinks to one line per category. The ask is that you own the supervision layer around it — process exit codes, alerting on missing runs, and a decision on what happens when a run overlaps the previous one. This package deliberately doesn't solve that, so it lands with you.
How can I help you explore Laravel packages today?