Laravel 5.1 中的随机 cron 作业
Posted
技术标签:
【中文标题】Laravel 5.1 中的随机 cron 作业【英文标题】:Randomized cron jobs in Laravel 5.1 【发布时间】:2016-01-09 16:00:00 【问题描述】:我正在使用 Laravel 的工匠调度程序来管理应用程序的 cron 作业。该应用程序的功能之一是虚拟商店,它以记录在数据库中的时间间隔“进货”(即stock_min = 5
和stock_max = 15
意味着商店将每 5-15 分钟进货一次)。这些值可以随时更改。
我将如何在 Laravel 中设置 cron,以便它遵守给定的具有足够随机性的时间间隔,并查看自上次补货以来该时间间隔是否发生了变化?
【问题讨论】:
【参考方案1】:您需要创建一个名为“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 5.1 中的随机 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel 5.1 在 IronMQ 中获取排队作业的数量?
使用 aws eb 和 laravel 任务调度的 Cron 作业