2016-11-16 83 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'); 
    } 
} 

希望这可以帮助别人!