2016-11-16 76 views
2

所以我有一個接口,我叫Icron的Laravel 5:運行PHP工匠遷移,觸發功能在cron調度

namespace App\Console\CronScripts; 

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

我也有使用此稱爲UpdateStuff

class UpdateStuff implements iCron{ 

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

所以內部類我有的內核:

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 

任何人有爲什麼發生這種情況的任何想法?

在此先感謝!

編輯:所以我發現它調用了日程安排功能,

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

這將調用defineConsoleSchedule()功能,後者又運行$這個 - >計劃($時間表);然後由於某種原因,即使它不是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'); 
    } 
} 

希望這可以幫助別人!