laravel调度程序在循环内

问题描述

当我在下面的代码中处理laravel排队的工作时,我感到困惑,它处理了user_id 1,2,3,4,5,但是当它在1分钟标记后运行时,它将尝试运行user_id 1,4 ,5再次,然后不再继续6,7,8,9,10。我想连续运行直到所有用户完成(这意味着我不知道何时完成所有用户的时间)。我该怎么办?

应用程序/控制台/内核

<?PHP

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\User;
use Illuminate\Support\Facades\File;
use App\Exceptions\Handler;
use App\Jobs\UserJob;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {   
        $users = User::where('is_status',1)->get();
        foreach( $users as $user ){
          $schedule->job( new UserJob($user) )->everyMinute();
        }
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
        require base_path('routes/console.PHP');
    }
}

这是我的cronjob,每分钟运行一次

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

解决方法

你有没有试过给它一个名字并在它完成之前添加而不重叠,也许是它的开始。我目前正在为类似的问题苦苦挣扎。

->name('Process Whatever')
->withoutOverlapping()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...