Если retry_after в config/queue.php меньше, чем реальное время работы джоба, очередь решит, что воркер завис, и отдаст задачу другому воркеру. Первый при этом ещё работает, так что джоб выполнится дважды. В доках правило такое: --timeout у воркера должен быть на несколько секунд меньше retry_after. php artisan queue:work --timeout=60 'retry_after' => 90,