2017-08-17 3 views
2

Ich versuche jede Minute eine Controller-Funktion auszuführen, um den Status meiner Server zu aktualisieren, aber mein Scheduler wird nur einmal ausgeführt, nachdem alle Zeilen in der Tabelle aktualisiert wurden. Dies ist das erste Mal, dass ich einen Aufgabenplaner in Laravel verwende. Ich habe versucht, es auf cmd auszuführen, und es sagt Laufender geplanter Befehl: Closure und nachdem die ganze Tabelle aktualisiert ist, stoppt die Aufgabe.Laravel Scheduler läuft nur einmal

//My Controller function to be called 

public function updateServerScheduler() 
{ 
    $servers = Server::all(); 
    ini_set('max_execution_time', 300); 

    foreach ($servers as $server) 
    { 
     //$server->firewall = @fsockopen($server->ip, 80, $errno, $errstr, 30); 

     exec("ping -w 60 " . $server->ip, $output, $result); 

     if($result != 0) 
     { 
     $server->status = 0; 
     $server->latency = "None"; 
     } 
     else 
     { 
     $server->status = 1; 
     $server->latency = $this->pingDomain($server->ip); 
     } 

     $server->last_update = date('Y-m-d H:i:s'); 
     $server->save(); 
    } 
} 


//My Kernel.php 

namespace App\Console; 
use App\Http\Controllers\HomeController; 
use Server; 
use Illuminate\Console\Scheduling\Schedule; 
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; 

class Kernel extends ConsoleKernel 
{ 
    protected $commands = [ 
     // 
    ]; 
    protected function schedule(Schedule $schedule) 
    { 

      $schedule->call(function() { 
       $hc = new HomeController(); 
       $hc->updateServerScheduler(); 
      })->everyMinute(); 
    } 

    protected function commands() 
    { 
     require base_path('routes/console.php'); 
    } 
} 
+0

Haben Sie Crontab hinzugefügt? weil PHP einmal ausgeführt wird, wenn Sie es jede Minute ausführen möchten, müssen Sie einen Cron-Job definieren –

+0

Nein, ich tat es nicht. Ich bin neu in diesem Scheduler Kannst du mir beibringen wie man einen Cron Job in Laravel erstellt? –

+0

https://laravel.com/docs/5.4/scheduling –

Antwort

0

Erstellen Sie Ihren Befehl zum Ausführen von Schedular und fügen Sie es in der Kernel-Datei. ex. $ schedule-> Befehl ('test') -> everyMinute();

+0

Ich habe dies bereits getan, aber es stoppt nach dem Aktualisieren aller Tabellen. Ich möchte, dass es nach jedem Update läuft. –

+0

Es läuft ständig, aber wie alle Updates getan haben, können keine Änderungen gefunden werden. – Nikita