如何从浏览器 运行 artisan queue:work 并将其发送到后台

How to run artisan queue:work from browser and send it to background

如果我在终端中 运行 php artisan queue:work --tries=3 &

命令将启动并将发送到后台...

但在 Laravel 如果我 运行 Artisan::call('queue:work', ['--option' => 'tries=3'.' &']);

我收到此错误:

Symfony\Component\Console\Exception\InvalidOptionException: The "--option" option does not exist. in /var/www/html/laravel/exercise/vendor/symfony/console/Input/ArrayInput.php:172
Stack trace:
#0 /var/www/html/laravel/exercise/vendor/symfony/console/Input/ArrayInput.php(134): Symfony\Component\Console\Input\ArrayInput->addLongOption('option', 'tries=1 &')

如果我运行Artisan::queue('queue:work');

该命令有效,但它是一个无限循环,它只会阻止整个应用程序。

那么有没有办法从应用程序 运行 queue:work 并将其发送到后台,就像在终端中一样?

这里有两件事应该分开:

排队作业

Artisan::queue('command:name', $options);

这告诉 Artisan,每当队列处理器工作时,执行 command:name


运行 一个 artisan 命令

在我看来,这就是您要找的东西。要从您的应用程序执行特定的 Artisan 命令,您还可以在 Artisan 外观上使用 call 方法。

Artisan::call('queue:work');

另一个问题是您以错误的方式指定了 选项。试试这个:

Artisan::call('queue:work', ['--tries' => 3]);