随机cron作业在Laravel 5.1


Randomized cron jobs in Laravel 5.1

我正在使用Laravel的工匠调度程序来管理应用程序的cron作业。这个应用程序的一个特点是虚拟商店,"补充"的间隔,记录在数据库中(即stock_min = 5stock_max = 15将意味着商店将补充每5-15分钟)。这些值可以随时更改。

我该如何在Laravel中设置cron,以便它能够坚持给定的具有足够随机性的间隔,并查看间隔自上次补充库存以来是否发生了变化?

您需要创建一个名为'stock_update_tracking'或类似的模型,以记录下一次库存应该补充的时间。

stock_update_tracking
    next_update

然后,您可以每分钟调用一个cron作业,并简单地检查next_update值是否大于当前时间戳。

$schedule->call(function() {
    $nextUpdate = DB::table('stock_update_tracking')
        ->select('next_update')
        ->where('next_update', '<' Carbon::now())
        ->count();
    if($nextUpdate) {
        // Update the stock
        // Calculate a new next update time
        $newNextUpdate = Carbon::now();
        $newNextUpdate = $newNextUpdate->addMinutes(rand(5,15));
        // Save the newNextUpdate value in the stock_update_tracking table
        DB::table('stock_update_tracking')->update(['next_update' => $newNextUpdate])
    }
    })->everyMinute()->withoutOverlapping()