【问题标题】:Randomized cron jobs in Laravel 5.1Laravel 5.1 中的随机 cron 作业
【发布时间】:2016-01-09 16:00:00
【问题描述】:

我正在使用 Laravel 的工匠调度程序来管理应用程序的 cron 作业。该应用程序的功能之一是虚拟商店,它以记录在数据库中的时间间隔“进货”(即stock_min = 5stock_max = 15 意味着商店将每 5-15 分钟进货一次)。这些值可以随时更改。

我将如何在 Laravel 中设置 cron,以便它遵守给定的具有足够随机性的时间间隔,并查看自上次补货以来该时间间隔是否发生了变化?

【问题讨论】:

    标签: php laravel cron laravel-artisan


    【解决方案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()
    

    【讨论】:

    • 完美!简单问题的简单解决方案。没想到我觉得很傻,非常感谢。
    • 不客气。如果它解决了您的问题,请记住将其标记为正确答案。
    猜你喜欢
    • 2011-09-02
    • 2013-10-09
    • 2015-09-10
    • 1970-01-01
    • 2013-01-09
    • 2015-04-19
    • 1970-01-01
    • 2013-04-28
    • 2014-06-21
    相关资源
    最近更新 更多