2016-06-01 4 views
2

Ich versuche, einen Befehl zweimal am Tag zu planen:eine Aufgabe zweimal täglich mit Laravel Planung

Hier ist mein Code:

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'); 
    } 

ich diese Fehlermeldung:

[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 

Stack-Spur:

Ich weiß nicht wirklich warum ??? Irgendeine Idee???

Antwort

5

twiceDaily akzeptiert Parameter als Stunden.
Standardwerte sind public function twiceDaily($first = 1, $second = 13), was bedeutet, dass die Aufgabe täglich um 1:00 & 13:00 ausgeführt wird.

Sie versuchen, Task 23:27 und 23:28 auszuführen, was technisch nicht verfügbar ist, wenn diese Methode (twiceDaily) verwendet wird, da sie keine Minuten als Parameter akzeptiert.


Lösung

ändern twiceDaily()-<command>->cron('27,28 23 * * *');.
Es wird Ihr Befehl um 23:27 und 23:28 laufen.


oder wenn Sie wollen mit einer anderen Stunde und Minuten Befehl zweimal am Tag laufen, Sie sollten, wird außer Kraft setzen mit dailyAt() (zwei dailyAt() auf einen Befehl zwei getrennte Befehle verwenden und wird nicht funktionieren, wie Sie wollen).

+0

Ok, ich verstehe. Im wirklichen Fall ist der Algorithmus, um die 2 Stunden (Init und Ende) zu bekommen, ein bisschen schwierig, also könnte ich es nicht tun, wie Sie sagen. Sollte es mit 2 funktionieren -> dailyAt ('13: 00 '); oder die zweite wird es die erste außer Kraft setzen? Grundsätzlich werden die 2 Stunden zufällige Stunden sein wie: 09: xx und 19: xx –

+0

23:27 und 23:28 ist nur zum Testen. –

+0

Zwei 'dailyAt()' überschreiben sich selbst. Wenn Sie sich an 'dailyAt()' halten müssen, wäre die einzige Lösung, 2 gleiche Befehle mit unterschiedlichen Ausführungsdaten zu setzen. –