2017-02-13 8 views
0

毎秒コマンドを実行する必要があります。これは、真のロジックとsleep(1)のwhile(true) 。以下 全コード:Laravel 5.2コマンドPHPのdate()スタック

public function handle() 
{ 
    $this->setUniverse(); 

    while(true) { 
     $updateStart = microtime(true); 
     $this->fleetHandler->update(); 
     $updateEnd = microtime(true); 

     $this->info('Fleets updated for time '. date("d m Y H:m:s") . ' on universe ' . $this->universe); 
     usleep(1000000); 
    } 
} 

このコマンドを確保するためにのみ、私は、スケジューラでこのコードを持っていたら

$schedule->command('game:fleet:update', ['universe' => $key]) 
      ->everyMinute() 
      ->withoutOverlapping(); 

を実行し、問題

何が起こることは時間がによって印刷さということですPHPのdate()関数は、秒を除いて常に同じです。時刻11:02も常に同じで、VMを再起動するとリセットされます。コンソールに

出力例

Fleets updated for time 13 02 2017 11:02:57 on universe alpha 
Fleets updated for time 13 02 2017 11:02:58 on universe alpha 
Fleets updated for time 13 02 2017 11:02:59 on universe alpha 
Fleets updated for time 13 02 2017 11:02:00 on universe alpha 
Fleets updated for time 13 02 2017 11:02:01 on universe alpha 
Fleets updated for time 13 02 2017 11:02:02 on universe alpha 
Fleets updated for time 13 02 2017 11:02:03 on universe alpha 

私はdateすべてでシステム時刻を確認し、正常です。誰でもここで何が起こっているか教えていただけますか?ありがとうございました。

+0

だけのcronでコマンドを起動しようとすることはできますか?それは毎秒あなたのコマンドを開始します。 PHPは長時間のスクリプトには悪いです。 – KoIIIeY

+0

https://laravel.com/docs/5.2/scheduling – KoIIIeY

+0

cronでは、毎秒スクリプトを実行することはできません。 –

答えて

0

あなたと私は両方ともタイムスタンプを見逃してしまっています。あなたがdate("d m Y H:i:s")をしたい

代わりi = minutes and m = Months

+0

はい、これはPHPのバグでしょうか? –

+0

いいえ、それはタイプミスです。私は私の答えを更新します。 – Luke

+2

「2」はすべて、「第2月」であると言っていました。時間の「2分」という事実は、厄介な偶然です。 – Luke