2016-06-01 62 views
2

我想安排一个命令,每天两次:每天两次调度任务与Laravel

这里是我的代码:

protected function schedule(Schedule $schedule) 
    { 

     $morningCarbonHour = Carbon::now(); 
     $morningCarbonHour->hour = 23; 
     $morningCarbonHour->minute = 27; 
     $morningCarbonHour->second = 00; 

     $hourIni = $morningCarbonHour->format('H:i'); 

     $nightCarbonHour = Carbon::now(); 
     $nightCarbonHour->hour = 23; 
     $nightCarbonHour->minute = 28; 
     $nightCarbonHour->second = 00; 

     $hourFin = $nightCarbonHour->format('H:i'); 

     $schedule->command('check:time') 
       ->twiceDaily($hourIni,$hourFin) 
       ->timezone('America/Mexico_City'); 
    } 

我收到此错误信息:

[2016-05-31 23:29:01] production.ERROR: exception 'InvalidArgumentException' with message 'Invalid CRON field value 23:27,23:28 at position 1' in /home/forge/myproject/vendor/mtdowling/cron-expression/src/Cron/CronExpression.php:147 

堆栈跟踪:

我真的不知道为什么?任何想法???

回答

5

twiceDaily接受小时参数。
默认值是public function twiceDaily($first = 1, $second = 13)这意味着任务将在1:00 & 13:00每日执行。

您试图运行23:27和23:28的任务,这在技术上无法使用此方法(twiceDaily),因为它不接受分钟作为参数。


解决方案

变化twiceDaily()<command>->cron('27,28 23 * * *');
它会在23:27和23:28运行你的命令。


,或者如果你想运行命令一天两次,用不同的小时和分钟,你应该使用两个分开的命令与dailyAt()(二dailyAt()上一个命令,将覆盖并根据需要将无法正常工作)。

+0

好的,我明白了。在真实情况下,获得2小时(init和end)的算法有点棘手,所以,我不能像你说的那样做。它是否适用于2 - > dailyAt('13:00');或者第二个会覆盖第一个?基本上,2小时将是随机小时,如:09:xx和19:xx –

+0

23:27和23:28仅用于测试 –

+0

两个'dailyAt()'将会覆盖自己。如果你必须坚持'dailyAt()',唯一的解决方法是放2个相同的命令,但是执行日期不同。 –