随机时间的laravel调度命令

随机时间的laravel调度命令,laravel,random,laravel-scheduler,Laravel,Random,Laravel Scheduler,我有一个奇怪的问题。 我使用自定义命令通过FBAPI共享一些url 现在这个命令被安排为一个固定的cron配置,但我希望它是随机的,可能在时间范围之间 我尝试在命令中使用随机睡眠函数,但我得到了奇怪的行为 是否有人已经必须面对此问题?您可以在开始时生成随机时间 protected function schedule(Schedule $schedule) { $expression = \Cache::get('schedule:expressions:inspire'); if

我有一个奇怪的问题。 我使用自定义命令通过FBAPI共享一些url

现在这个命令被安排为一个固定的cron配置,但我希望它是随机的,可能在时间范围之间

我尝试在命令中使用随机睡眠函数,但我得到了奇怪的行为


是否有人已经必须面对此问题?

您可以在开始时生成随机时间

protected function schedule(Schedule $schedule)
{
    $expression = \Cache::get('schedule:expressions:inspire');
    if (!$expression) {
        $randomMinute = random_int(0, 59);

        // hour between 8:00 and 19:00
        $hourRange = range(8, 19);
        shuffle($hourRange);
        // execute twice a day
        $randomHours = array_slice($hourRange, 0, 2);

        $expression = $randomMinute . ' ' . implode($randomHours, ',') . ' * * * *';
        \Cache::put('schedule:expressions:inspire', $expression, Carbon::now()->endOfDay());
    }

    $schedule->command('inspire')->cron($expression);
}

一种解决方案是将要运行的代码放入排队作业中,然后随机延迟该作业。例如,此代码将在每小时的随机时间运行(这很容易推断为每天的随机时间或其他时间间隔):


好办法。我认为您的cron表达式有一个太多的
*
是的,我试图修复它,使其具有
***
,但堆栈溢出需要至少编辑6个字符:/I使用after hook更新了cron时间<代码>$fb=Cache::get('facebook_cron');if($fb){Cache::forever('facebook_cron','*/30****');}$schedule->command('facebook:post')->cron($fb)->after(函数(){Cache::forever('facebook_cron','*/'.rand(20,40)。'*****');})
$schedule
  ->call(function () {
    $job = new SomeQueuedJob();
    // Do it at some random time in the next hour.
    $job->delay(rand(0, 60 * 59));
    dispatch($job);
  })
  ->hourly();