如何从浏览器 运行 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]);
如果我在终端中 运行 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]);