illuminated/console-mutex
Prevent overlapping Laravel console commands with a simple mutex. This package adds atomic locking to Artisan commands so scheduled or manual runs never execute concurrently, helping avoid duplicate work and race conditions.
withoutOverlapping() / onOneServer() behavior, need queue job uniqueness, require advanced distributed-lock semantics such as lease renewal or fencing tokens, or need strong observability and alerting out of the box.For executives: This is a low-cost operational safeguard. It helps ensure critical scheduled jobs run once at a time, reducing the risk of duplicate customer emails, double billing actions, repeated exports, or conflicting data syncs as we scale across multiple servers. It is MIT-licensed and small in scope, so the main investment is integration and testing rather than licensing or platform lock-in. The latest release (13.0.0) adds Laravel 13 support, which keeps this option viable through our next framework upgrade rather than forcing a rewrite or replacement.
For engineering: The package provides a mutex for Laravel console commands, fitting naturally into existing Artisan and scheduler workflows. The 13.0.0 release is a major version bump whose only noted change is added Laravel 13 support, so plan the upgrade together with the Laravel 13 migration rather than as an isolated bump. We should pilot it on one or two high-risk commands, define lock TTLs and failure behavior, and add logging/alerting when a command cannot acquire the lock. Because adoption is low, we should pin the version, cover it with integration tests across the Laravel 12→13 transition, and keep a fallback path using Laravel’s native cache locks or scheduler overlap controls.
How can I help you explore Laravel packages today?