2016-11-16 8 views
2

は、だから私は、私はまた、これがそう内部UpdateStuffLaravel 5:実行中のPHPの職人の移行は、

class UpdateStuff implements iCron{ 

    public static function run($args = NULL){ 
     //I do api calls here to update my records 
     echo "Begin Updating Stuff"; 
    } 
} 

と呼ばれる使用するクラスを持って、私はアイクロン

namespace App\Console\CronScripts; 

interface iCron{ 
    public static function run($args); 
} 

と呼ばれるインタフェースを持っているのcronスケジューラの機能をトリガーカーネルは私が持っています:

use App\Console\CronScripts\UpdateStuff; 

class Kernel extends ConsoleKernel{ 
    protected $commands = []; 

    protected function schedule(Schedule $schedule){ 
     $schedule->call(UpdateStuff::run(NULL))->dailyAt('23:00'); 
    } 
} 

私は毎日UpdateStuffの実行機能を 午後11時。しかし問題は、使用するたびに実行機能が呼び出されていることです。

php artisan migrate 

誰もが、なぜこのようなことが起こっているのでしょうか?

ありがとうございます!

EDIT:それはスケジュール機能を呼び出しているところだから私は、これは中にターンます$ this->スケジュール($スケジュール)を実行defineConsoleSchedule()関数を呼び出し、

vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php 

を見つけました。それから、11PMでなくても何らかの理由でUpdateStuff :: run($ args)が実行されています

答えて

0

私はそれを理解しました!したがって、混乱している人にとっては、cronスケジューラには、パラメータを持たない静的関数を指すClosureまたは文字列が必要です。ここに私が思いついたことがあります:

class Kernel extends ConsoleKernel{ 
    protected $commands = []; 

    protected function schedule(Schedule $schedule){ 
     //This calls the run function, but with no parameters 
     $schedule->call("App\Console\CronScripts\UpdateStuff::run")->dailyAt('23:00'); 

     //If you need parameters you can use something like this 
     $schedule->call(function(){ 
      App\Console\CronScripts\UpdateStuff::run(['key' => 'value']); 
     })->dailyAt('23:00'); 
    } 
} 

希望これは誰かを助ける!

関連する問題