如何使用命令行手动运行 laravel/lumen 作业

2022-08-30 18:47:26

我已经在文件夹中创建了一个作业文件,如果可能的话,我想使用命令行只运行一次。app/Jobs/MyJob.php

像这样:

> php MyJob:run

我应该使用什么命令来运行此文件或句柄中的方法?


答案 1

更新

我创建了mxl/laravel-job composer包,提供Laravel命令,用于从命令行调度作业:

$ composer require mxl/laravel-job
$ php artisan job:dispatch YourJob # for jobs in app/Jobs directory (App\Jobs namespace)
$ php artisan job:dispatch '\Path\To\YourJob' # dispatch job by its full class name
$ php artisan job:dispatchNow YourJob # dispatch immediately
$ php artisan job:dispatch YourJob John 1990-01-01 # dispatch with parameters

Package 还提供了一种通过使用基类来减少样板代码的方法,并且具有允许同时实现命令行参数解析和使用 PHP 代码和命令行的作业的接口。JobFromParameters

有关其功能的更多信息,请访问包 GitHub 页面

旧答案

php artisan make:command DispatchJob

以创建运行作业的特殊工匠命令。

打开创建的文件并定义类,如下所示:DispatchJob.phpDispatchJob

class DispatchJob extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'job:dispatch {job}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Dispatch job';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $class = '\\App\\Jobs\\' . $this->argument('job');
        dispatch(new $class());
    }
}

现在你应该启动队列工作线程:

php artisan queue:work

之后,您可以从命令行运行作业:

php artisan job:dispatch YourJobNameHere

答案 2

最简单的方法是使用Tinker打电话

这是用于调试的Laravel命令,通过从项目根目录运行以下命令来使用它

php artisan tinker

从修补工中分派特定队列上的作业

\Queue::pushON('rms', new App\Jobs\UpdateRMS());

第一个参数 - 队列名称

第二个参数 - 作业名称

一次将多个作业分派到特定队列

\Queue::bulk([new App\Jobs\UpdateRMS(), new App\Jobs\UpdateRMS()], null, 'rms');

演示(产品服务是我的项目名称)只需按照它enter image description here在队列中找到已调度的作业)我的案例队列配置为Redis

enter image description here


推荐