2015-10-02 5 views
18

Ich versuche, mehrere Jobs in Laravel zu unterschiedlichen Zeiten zu laufen.Planen Sie mehrere Crons in Laravel

protected function schedule(Schedule $schedule) 
{ 
     $schedule->command('emails:send') 
       ->dailyAt('08:00'); 

     $schedule->command('emails:evening-status') 
       ->dailyAt('17:00'); 

     $schedule->command('email:weekly-report') 
       ->weekly()->mondays()->at('08:00'); 
} 

Das Problem hierbei ist nur der erste Befehl - emails:send - funktioniert. Die anderen Befehle funktionieren nicht zur angegebenen Zeit. Wenn ich sie manuell ausführe, funktionieren sie jedoch einwandfrei.

Was fehlt mir?

+0

Das gleiche Problem hier Laravel 5.1.31 – PiTheNumber

+1

Verwandte Frage mit: http://stackoverflow.com/questions/33998179/laravel-5-1-task-scheduling-command-issue – PiTheNumber

+0

adaequat nur mit Laravel 5.1.34 –

Antwort

0

Wenn zweite comand nicht funktioniert:

$schedule->command('emails:evening-status') 
      ->dailyAt('17:00'); 

können Sie nur eine Codezeile einzufügen, die das aktuelle Datum in irgendeiner Datei zB drucken. "test.txt" und dann die gewünschte Zeit einchecken, wenn die Datei erstellt wurde. Wenn eine Datei erstellt wird, können Sie daraus schließen, dass etwas mit dem Code im geplanten Skript nicht stimmt.

0

Verwenden Warteschlange für die Auftragsbearbeitung

auf cron, fügen Sie alle Jobs

Run mehrere Warteschlangen Arbeiter

-1

Sie unter Code versuchen können, in die Warteschlange:

protected function schedule(Schedule $schedule) 
{ 
     $schedule->command('emails:send') 
       ->dailyAt('08:00')->withoutOverlapping(); 

     $schedule->command('emails:evening-status') 
       ->dailyAt('17:00')->withoutOverlapping(); 

     $schedule->command('email:weekly-report') 
       ->weekly()->mondays()->at('08:00')->withoutOverlapping(); 
} 

Above Code nur ausführen ohne Überlappung. Sie können mehr Idee über prevent overlapping bekommen.

Lassen Sie mich wissen, wenn Sie immer noch vor demselben stehen.

+0

Was hat Überschneidungen damit zu tun? – Curos

0

wenn Sie Laravel Schedule Verwenden Sie diesen Code

$schedule = new Schedule(); 
    $schedule->command('emails:send') 
      ->dailyAt('08:00')->withoutOverlapping(); 

    $schedule = new Schedule(); 
    $schedule->command('emails:evening-status') 
      ->dailyAt('17:00')->withoutOverlapping(); 

    $schedule = new Schedule(); 
    $schedule->command('email:weekly-report') 
      ->weekly()->mondays()->at('08:00')->withoutOverlapping(); 

verwenden müssen, können aber sein, so falsch ist, raten Laravel Handwerker-Befehl zu verwenden, und setzt diese cammand auf Host-Cronjobs

0

ähnliche Situation, mit der Ausnahme

$schedule->call('\App\Http\Controllers\comm\commCron::abc'); 
$schedule->call('\App\Http\Controllers\comm\commCron::xyz'); 

ich hatte das gleiche Problem, später erkannte erster cron ruft:, dass ich eine Methode für jede cron kann mit call, zum Beispiel Aufruf ein an einem Fehlerpunkt.

So stellen Sie bitte sicher, dass keiner der Crons in oder die() retuls. Nur return false stattdessen (wenn Sie müssen).

1

Wir haben Intro ähnliche Probleme bei der Verwendung von Laravel eingebauten Scheduling-Modul.

In unserem Fall wurde der erste Befehl im Hintergrund ausgeführt und verhinderte, dass die folgenden geplanten Befehle ausgeführt wurden.

Als einen schnellen Test, versuchen Sie die Reihenfolge der Befehle zu ändern, so dass E-Mails: senden unten ist und sehen, ob das funktioniert. Im Allgemeinen fangen Sie alle Ausnahmen ab, die ausgelöst werden, und das Problem sollte behoben werden.