Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 02.06.2023 10:16:32

Job запускается два раза. Почему?

Добры день! Помогите разобраться с очередями. При локальной отладке всё работает, но на рабочем сервере Job запускается два раза. Job становится в очередь по расписанию в app\Console\Kernel.php:

$schedule->job(new PrepareNoCheckMailsJob())->dailyAt('09:00');

Воркер тоже запускается там же, только каждую минуту:

$schedule->command('queue:work --stop-when-empty')->everyMinute();

Задача создаётся и попадает в таблицу jobs.

В самой задаче заданы следующие параметры:

public $tries = 3;
public $timeout = 240;

В задаче есть логирование начала и окончание её выполнения. Судя по логам, ровно через две минуты, задача запускается повторно. Исключение — если задача успевает выполнится в эти самые две минуты.

Пытался запускать воркер таким образом:

$schedule->command('queue:work --once')->everyMinute();

Всё равно ровно через две минуты задача запускается повторно.

И почему две минуты мне тоже не понятно.

Локально воспроизвести такое поведение не могу.

Посоветуйте, как обуздать воркер?

Спасибо!

Не в сети

#2 02.06.2023 11:01:01

Re: Job запускается два раза. Почему?

Спасибо, разобрался. Причина крылась в параметре retry_after конфигурации очереди (файл config/queue.php)

Этот параметр должен быть на несколько секунд больше, чем свойства задачи $timeout;

Цитата из документации:

The --timeout value should always be at least several seconds shorter than your retry_after configuration value. This will ensure that a worker processing a frozen job is always terminated before the job is retried. If your --timeout option is longer than your retry_after configuration value, your jobs may be processed twice.

Не в сети

Подвал раздела