2016-04-01 10 views
1

Hy Jungs, ich habe das Kapitel namens Planung von Laravels Dokumentation gelesen, aber Ich habe nicht viele Informationen gefunden. Ich versuche, die Ausführung einer Aufgabe so anzupassen, dass sie alle 30 Sekunden ausgeführt wird. Gibt es eine Lösung? Sorry für mein Englisch und einen schönen Tag.kann mit Laravel jede x Sekunde eine Aufgabe ausführen?

Antwort

-1

ich dieses Zitat auf der Laravel docs haben ...

In der Vergangenheit haben die Entwickler einen Cron-Eintrag erzeugt für jede Aufgabe, die sie planen müssen. Dies ist jedoch Kopfschmerzen. Ihr Aufgabenplan befindet sich nicht mehr in der Quellcodeverwaltung, und Sie müssen SSH in Ihren Server einfügen, um die Cron-Einträge hinzuzufügen. Mit dem Laravel Command Scheduler können Sie Ihren Befehlsplan in Laravel selbst flüssig und expressiv definieren, und auf Ihrem Server wird nur ein einzelner Cron-Eintrag benötigt.

Sie müssen noch Cron verwenden, um Ihre Aufgaben zu laufen, aber die Laravel der Scheduling verwenden Sie nur einen Job auf dem Cron gesetzt und steuern alle Arbeitsplätze der Anwendung durch den Task-Scheduling.

Beispiel:

Set diese cron auf dem Server:

* * * * * php /path/to/artisan schedule:run 

Es ist im Begriff, die Laravel Befehl Scheduler jede Minute anrufen und dann Laravel wertet Ihre geplanten Aufgaben und die Aufgaben ausführt, die sind fällig.

dann auf Ihre Datei app/Console/Kernel.php Sie alle Ihre Aufgaben als Code unten konfigurieren:

$schedule->call(function() { 
     DB::table('recent_users')->delete(); 
    })->daily(); 

$schedule->command('inspire')->hourly(); 
+1

Mit dieser Lösung können Sie jede Minute und nicht alle X Sekunden eine Aufgabe ausführen. Dies liegt daran, dass das Cron-Ausführungsintervall einmal pro Minute ist, also können Sie keine Intervalle niedriger als das haben! – Atrakeur

0

standardmäßig CRON Aufgaben geplant sind in Mindestdauer 1 Minute, aber es gibt Abhilfe für Ihr Problem.

In Console Kernel sollten Sie so etwas tun:

/** 
* Define the application's command schedule. 
* 
* @param \Illuminate\Console\Scheduling\Schedule $schedule 
* @return void 
*/ 
protected function schedule(Schedule $schedule) 
{ 
    $schedule->command('your_command:run',['--delay'=> 0])->everyMinute(); 
    $schedule->command('your_command:run',['--delay'=> 30])->everyMinute(); 
} 

In Command Klasse Sie Signatur definieren, sollten die nimmt Parameter können.

protected $signature = 'your_command:run 
        {--delay= : Number of seconds to delay command}'; 

In Griff Methode sollten Sie Wert dieses Parameters lesen und schlafen diese Aufgabe für bestimmte Anzahl von zweiten sleep Funktion in bauen.

/** In handle method **/ 
sleep(intval($this->option('delay'))); 

Diese Lösung wird Ihre Aufgabe alle 30 Sekunden ausführen, Sie können die Anzahl der Aufgaben mit unterschiedlicher Verzögerung multiplizieren. In diesem Fall müssen Sie planen Methode in der Kernel-Klasse bearbeiten.

Verwandte Themen