Laravel очередь не выполняет задание, заданное c тайм-аут - PullRequest
2 голосов
/ 24 января 2020

В соответствии с документами Laravel я могу указать задание задания c timeout:

Если для задания указано время ожидания, оно будет иметь приоритет над любым указанным временем ожидания в командной строке [...]

Итак, когда я запускаю artisan queue:listen без опции --timeout, и я определяю время ожидания внутри задания (как подсказывает мне Laravel):

public $timeout = 600;

Я ожидаю, что время ожидания указанного задания c составит 600 секунд. К сожалению, я все еще получаю ProcessTimedOutException. Пользовательский таймаут работает только тогда, когда я запускаю очередь с --timeout=600.

Я использую Laravel 6 с PHP 7.4. В соответствии с рекомендациями Laravel я также включил расширение pcntl PHP. Для очереди я использую драйвер database со следующей конфигурацией:

'database' => [
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'default',
    'retry_after' => 90,
]

1 Ответ

0 голосов
/ 28 января 2020

Я открыл отчет об ошибке , потому что я не мог заставить это работать. Однако кажется, что время ожидания, указанное в классе задания, имеет приоритет над временем ожидания, указанным в командной строке, при запуске очереди с queue:work.

Я проверил это и могу подтвердить, что он работает с queue:work. Согласно комментарию в моем отчете об ошибке, он не работает с queue:listen, потому что:

queue:listen запускает несколько процессов, в то время как queue:work является одним процессом. queue:listen устанавливает тайм-аут для запускаемого процесса, поэтому мы не оставляем запущенные процессы на машине в случае, если мастер-процесс по какой-то причине был убит.

...