Мое приложение Laravel стоит за балансировщиком нагрузки, а 2 экземпляра EC2 работают одновременно. До того, как я управлял Cronjob только на одном сервере, но это не идеальный способ, потому что, если нагрузка увеличилась или что -то необычное ошибку произойдет, и если 3 -й экземпляр EC2 инициализируется, то Cronjob начнется и на этом сервере, и мой Cronjob выполняет критическую задачу, такую как заряд полосы или истекает Подписки, и если оба сервера выполняют задачу Cronjob, то пользователь будет взимать плату за несколько раз. Я изменил свой драйвер кэша по умолчанию с файла на Redis в .env file. Cache_driver = redis и в консоли/kernel.php добавлено метод Ononeserver, подобный этому.
Код: Выделить всё
$schedule->command('subscription:autorenew')->everyMinute()->withoutOverlapping()->onOneServer();
Теперь даже на обоих серверах включен Crontab, который выполняет задачу только на одном сервере, но мой конвейер развертывания имеет командный PHP Artisan Cache: Clear из -за этого блокировки выпускается даже задача находится в процессе, и второй сервер также начинает выполнять одну и ту же задачу в одно и то же время. Используйте REDIS для распределенного блокировки, чтобы PHP Artisan Cache: Clear Не влияйте на блокировку кэша Redis?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... -cacheclea