Пакет Laravel Console Mutex – предотвращает одновременное выполнение одной и той же команды. Это помогает избежать различного рода конфликтов в данных и лишнего расходования ресурсов сервера.
Установка пакета:
composer require illuminated/console-mutex
Для использования необходимо указать trait WithoutOverlapping:
use Illuminated\Console\WithoutOverlapping;
class ExampleCommand extends Command
{
use WithoutOverlapping;
// ...
}
Для того, чтобы предотвратить выполнение более 1 экземпляра консольной задачи одновременно пакет предусматривает ряд стратегий предотвращения:
file
(default)mysql
redis
memcached
Таким образом, можно выбрать БД или иное хранилище для данных о Mutex-е.
Функционал пакета таков, что есть возможность как просто блокировать выполнение команды, вызванное при запуске другой, так и подождать освобождения указаное время.
Можно для нескольких команд задать имя mutex-а, чтобы для них можно было использовать общий Mutex.