当我使用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;
}
它确实工作了一次,但不是每一分钟,我创建了工作表。有人可以帮我这个吗?提前谢谢你。
答案 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将评估您的计划任务并运行到期的任务。