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 = 5stock_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 cron不在OVH工作

如何使用 Laravel 5.1 在 IronMQ 中获取排队作业的数量?

Laravel 4 的 Cron 作业

使用 aws eb 和 laravel 任务调度的 Cron 作业

Laravel 需要 Mcrypt PHP 扩展。不适用于 cron 作业

Laravel 命令在 AWS EC2 上由 Cron 执行时返回不同的输出