2017-08-17 60 views
2

我試圖每分鐘運行一個控制器函數來更新我的服務器的狀態,但是我的調度程序在更新表中的所有行後才運行一次。這是我第一次在Laravel中使用任務調度程序。我試着在cmd上運行它,它說運行計劃的命令:Closure和所有表更新後,任務停止。Laravel調度程序只運行一次

//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嗎?因爲php運行一次,如果你想每分鐘運行一次,你需要定義一個cron作業 –

+0

不,我沒有。我是這個調度程序的新手,你能教我如何在laravel中創建一個cron作業嗎? –

+0

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

回答

0

創建命令以運行schedular並將其添加到內核文件中。 ex。 $附表>命令( '試驗') - > everyMinute();

+0

我已經這樣做了,但是在更新所有表後它停止了。我希望它在每次更新後都能運行。 –

+0

它不斷運行,但所有更新都完成後無法找到任何更改。 – Nikita