簡體   English   中英

Laravel 5:運行php artisan migrate,觸發cron scheduler中的函數

[英]Laravel 5: Running php artisan migrate, triggers functions in cron scheduler

所以我有一個名為iCron的界面

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');
    }
}

據說我想在每天晚上11點調用UpdateStuff的run函數。 但問題是,每次我使用它時都會調用run函數:

php artisan migrate

任何人都有任何想法為什么會這樣?

提前致謝!

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

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

這將調用defineConsoleSchedule()函數,該函數反過來運行$ this-> schedule($ schedule); 然后由於某種原因,UpdateStuff :: run($ args)正在執行,即使它不是11PM

我想到了! 因此對於任何困惑的人來說,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');
    }
}

希望這有助於某人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM