Laravel 5.1中的随机cron工作

时间:2015-10-12 08:36:27

标签: php laravel cron artisan

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

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

1 个答案:

答案 0 :(得分: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()