Laravel在初始化时只安排一次火

时间:2018-01-22 11:46:48

标签: php laravel schedule

当我使用php artisan schedule:run命令时,shuffleQuoteOfTheDay方法会被评估一次,然后它不会每分钟触发它。

内核@计划方法

protected function schedule(Schedule $schedule)
{

  $schedule->call('App\Services\MotivationalQuoteService@shuffleQuoteOfTheDay')->everyMinute();

}

MotivationalQuoteService @ shuffleQuoteOfTheDay方法

  public function shuffleQuoteOfTheDay(){

    $currentQuoteOfADay = $this->getQuoteOfTheDay();

    $randomQuote = MotivationalQuote::where('quote_of_the_day',false)->inRandomOrder()->first();

    $currentQuoteOfADay->update(['quote_of_the_day' => false]);

    $randomQuote->update(['quote_of_the_day' => true]);

    return $randomQuote;

  }

它确实工作了一次,但不是每一分钟,我创建了工作表。有人可以帮我这个吗?提前谢谢你。

2 个答案:

答案 0 :(得分:3)

请参阅Task Scheduling

以下是您需要添加到服务器的唯一Cron条目:

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

这个Cron每分钟都会调用Laravel命令调度程序。然后,Laravel评估您的计划任务并运行到期的任务。

Laravel的任务调度程序不会留在内存中,它需要每分钟运行一次。然后它将检查在那一分钟内需要运行哪些任务并运行它们。当您使用PHP运行任务调度程序时,它只运行一次,它需要cron每分钟运行一次。

如果您的开发机器是Linux机器/宅基地,那么您可以测试这个lcoally。

添加cron作业:

$ crontab -e

然后将* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1添加到crontab文件并保存。

不要忘记启动/重新加载cron服务。

关于ubuntu:

 $  sudo service cron reload

答案 1 :(得分:2)

您需要设置cron,以便它可以每分钟运行php artisan schedule:run命令。

来自the docs

  

使用调度程序时,只需将以下Cron条目添加到服务器即可。如果您不知道如何将Cron条目添加到服务器,请考虑使用Laravel Forge等可以为您管理Cron条目的服务:

     

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

     

这个Cron每分钟都会调用Laravel命令调度程序。执行schedule:run命令时,Laravel将评估您的计划任务并运行到期的任务。