2017-08-17 27 views
2

私はサーバのステータスを更新するために毎分コントローラ機能を実行しようとしていますが、スケジューラはテーブル内のすべての行を更新した後に1回しか実行されません。これはLaravelのタスクスケジューラを初めて使用したときです。私はcmdでそれを実行しようとしました、それは実行されているスケジュールされたコマンド:クロージャと言うと、すべてのテーブルが更新された後、タスクが停止します。Laravel Schedulerが一度だけ実行されています

//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

crontabを追加しましたか?あなたがcronジョブを定義する必要がある毎分それを実行する場合は、PHPが1回実行されるので、 –

+0

いいえ、私はしませんでした。私はこのスケジューラを初めて使っているので、laravelでcronジョブを作成する方法を教えていただけますか? –

+0

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

答えて

0

schedularを実行してカーネルファイルに追加するコマンドを作成します。 ex。 $ schedule-> command( 'test') - > everyMinute();

+0

私はすでにこれを行っていましたが、すべてのテーブルを更新した後に停止します。私はそれが毎回更新後に実行したい。 –

+0

これは継続的に実行されていますが、すべての更新が完了した時点で変更が見つかりません。 – Nikita

関連する問題