web-dev-qa-db-ja.com

コマンドラインを使用して手動でlaravel / Lumenジョブを実行する方法

app/Jobs/MyJob.phpフォルダーにジョブファイルを作成しました。コマンドラインを使用して可能であれば、1回だけ実行したいと思います。

何かのようなもの:

> php MyJob:run

このファイルまたはハンドルでメソッドを実行するには、どのコマンドを使用すればよいですか?

7
Oscar David

[〜#〜]更新[〜#〜]

私は作成しました 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

パッケージは、ベースJobクラスを使用してボイラープレートを削減する方法も提供し、コマンドラインパラメーターの解析を実装してPHPコードからのジョブを使用できるようにするFromParametersインターフェースを備えていますとコマンドラインを同時に。

その機能についての詳細は パッケージGitHubページ を参照してください。

古い回答

走る

php artisan make:command DispatchJob

ジョブを実行する特別な職人コマンドを作成します。

作成済みを開くDispatchJob.phpファイルを作成し、DispatchJobクラスを次のように定義します。

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
28
mixel

syncとは異なるQUEUE_DRIVERを使用していて、以前に作成したキューをプロジェクトフォルダーからディスパッチしたい場合は、コマンド:

php artisan queue:work --queue=MyQueueName

これを確認してください リンクデータベースを構成するには、QUEUE_DRIVER

2
J.C. Gras

これが役立つことを願っています! cronからも実行できると思います。

https://laravel.com/docs/5.0/commands

0
aurawindsurfing

オプションのジョブの場合

これを試して

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

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

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $prefix = '\\App\Jobs\\';

        $jobClassName = trim($this->argument('job'));
        if(stripos($jobClassName,"/")){
            $jobClassName = str_replace('/','\\',$jobClassName);
        }
        $class = '\\App\\Jobs\\' . $jobClassName;

        if(!class_exists($class)){
            $this->error("{$class} class Not exists");
        }else {
            if ($this->argument('parameter')) {
                $job = new $class($this->argument('parameter'));
            } else {
                $job = new $class();
            }

            dispatch($job);
            $this->info("Successfully Dispatch {$class} ");
        }

    }
}

今、あなたはターミナルでこのように試すことができます

1.フォルダなし

php artisan job:dispatch appJob

2.フォルダ付き

php artisan job:dispatch folderName/appJob 

3.パラメーター付きフォルダー

php artisan job:dispatch folderName/appJob 12
0
Jignesh Joisar