问题描述
当我在下面的代码中处理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()