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

Jan*_*łek 5 php schedule laravel

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

内核@ schedule方法

protected function schedule(Schedule $schedule)
{

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

}
Run Code Online (Sandbox Code Playgroud)

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;

  }
Run Code Online (Sandbox Code Playgroud)

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

Sap*_*aik 9

请参阅任务调度

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

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

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

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

如果您的开发机器是 linux 机器/宅基地,那么您可以在本地进行测试。

添加 cron 作业:

$ crontab -e
Run Code Online (Sandbox Code Playgroud)

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

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

在 Ubuntu 上:

 $  sudo service cron reload
Run Code Online (Sandbox Code Playgroud)


Ale*_*nin 5

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

来自文档

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

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

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