2016-06-01 63 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個相同的命令,但是執行日期不同。 –