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