solotony
@solotony
покоряю пик Балмера

Как выполненить всех задачи в очереди и завершить процесс когда очередь пуста?

php artisan queue:work - он запускается и ждет задач пока его не убьют
php artisan queue:work --once - выполняет одну задачу и умирает

ни то ни другое не подходит. кто-нибудь сталкивался ? как решали ?

UPD:

php artisan queue:work не подходит потому что он убивается хостингом (даже самым добрым), и совсем не комильфо когда это происходит ровно посредине обновления Б/Д
php artisan queue:work --once (по крону) не подходит потому что задач может быть много.

вижу 2 пути решения

"laravel way" - написать новую команду queue:work c параметром --all (аналог --once но обрабатывать все задачи в очереди а не одну)

"unix way" - написать обертку для "php artisan queue:work -once" которая проверяет наличие задач в очереди и запускает процесс при необходимости столько раз сколько требуется.
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
solotony
@solotony Автор вопроса
покоряю пик Балмера
я просто внес небольшое изменение в Illuminate\Queue\Worker::daemon

вместо
$this->sleep($options->sleep);
написал
return
и в итоге
php artisan queue:work
выполняет всю очередь а потом умирает

зато теперь на виртуальном хостинге очередь прекрасно обрабатывается по крону.

p.s. конечно по-хорошему стоило бы оверрайдить классы Illuminate\Queue\QueueServiceProvider и Illuminate\Queue\Worker , но мне это было делать лень
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
OKyJIucT
@OKyJIucT
Sunshine reggae
Количество попыток. Если в течение этих попыток не появилось новых элементов в очереди, процесс убивается.
php artisan queue:work --tries=3
Таймаут. Если в течение этого времени не появилось новых элементов в очереди, процесс убивается.
php artisan queue:work --timeout=30

Все это есть в документации
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы