Laravel 5.1 中的随机 cron 作业

Randomized cron jobs in Laravel 5.1

我正在使用 Laravel 的 artisan 调度程序来管理应用程序的 cron 作业。此应用程序的功能之一是虚拟商店 "restock" 在数据库中记录的时间间隔(即 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()