如何在laravel上通过url调用命令调度?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在laravel上通过url调用命令调度?相关的知识,希望对你有一定的参考价值。

我使用laravel 5.6

我在kernel.php中设置我的日程表,如下所示:

<?php
namespace AppConsole;
use AppConsoleCommandsImportLocation;
use AppConsoleCommandsImportItem;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
    protected $commands = [
        ImportLocation::class,
        ImportItem::class,
    ];
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('inspire')->dailyAt('23:00');

    }
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
        require base_path('routes/console.php');
    }
}

所以有两个命令

我将展示我的一个命令:

namespace AppConsoleCommands;
use IlluminateConsoleCommand;
use AppModelsLocation;
class ImportLocation extends Command
{
    protected $signature = 'import:location';
    protected $description = 'import data';
    public function __construct()
    {
        parent::__construct();
    }
    public function handle()
    {
        ...
    }
}

我想通过url运行命令。所以它不会在命令提示符下运行

我试着这样:

我在路线中添加了这个脚本:Route::get('artisan/{command}/{param}', 'CommandController@show'); ,我制作了一个像这样的控制器:

namespace AppHttpControllers;
class CommandController extends Controller
{
    public function show($command, $param)
    {
        $artisan = Artisan::call($command.":".$param);
        $output = Artisan::output();
        return $output;
    }
}

我从这个网址打电话:http://myapp-local.test/artisan/import/location

有用。但它只运行一个命令

我想在内核中运行所有命令。因此,运行导入位置和导入项目

我该怎么做?

答案

你可以做的是在你的Kernel.php中注册一个自定义方法来检索受保护的$commands数组中的所有自定义注册命令:

public function getCustomCommands()
{
    return $this->commands;
}

然后在你的控制器中你可以循环它们并通过Artisan的call()queue()方法执行它们:

$customCommands = resolve(IlluminateContractsConsoleKernel::class)->getCustomCommands();

foreach($customCommands as $commandClass)
{
    $exitCode = Artisan::call($commandClass);
    //do your stuff further
}

有关documentation's page上可以理解的命令的更多信息

以上是关于如何在laravel上通过url调用命令调度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Docker 上运行 Laravel (Lumen) 调度程序

laravel框架中的任务调度corn

Laravel - 如何通过 AJAX (jQuery) 调用控制器函数

Laravel - 从路由调用工匠队列命令 - 邮递员超时

使用 aws eb 和 laravel 任务调度的 Cron 作业

如何在线运行 Laravel 调度命令作为 Cron Job