2016-04-27 14 views
1

私はループで連続して実行するシェルスクリプトを持っています。cakephp 3.1 mysqlがなくなった

データベースでレコードをチェックし、必要に応じてレコードを変更します。私がいる

 set_time_limit(0); 
     while(true){ 
      try{ 
       $this->out(mysql_ping()); 
       $companies = $this->findCompanies();    
       $companies = $this->reduceCompanies($companies, $rules); 
       $this->processCompanies($companies); 

      }catch (\Exception $e){ 
       Log::write('debug', $e->getMessage()); 
      $this->out($e->getMessage()); 
      } 
     sleep(3); 
     } 

問題は、このスクリプトで[OK]を実行しているようだが、その後ランダムにスローされます。 私は再接続する例外キャッチにいくつかのものを入れて試してみた 「を2006年のMySQLサーバが立ち去りました」

 }catch (\Exception $e){ 
        if(!mysql_ping()){//tried 
    $this->connection->reconnect(); //also tried 
$this->Company->getDatasource()->reconnect(); neither seem to work. 
        }} 

どのようにデータベースに再接続するのですか?

+0

私は同様の問題に直面しており、根本原因これは、理想的には起こらないはずです:( –

答えて

1

シェルが無限ループで実行されているのと同様の問題がありました。

のConnectionManagerのための使用追加:あなたはまだ接続されているかどうかを確認、あなたが最初の接続を必要とする直前に、ループでは

$connection = ConnectionManager::get('default'); 

use Cake\Datasource\ConnectionManager; 

がループする前に、接続を取得します切断された場合は接続してください:

if(!$connection->isConnected()) { 
    $connection->connect(); 
} 

もしあなたのシェルha長い時間待っている状態では、再度接続が必要なときに手動で切断して新しい接続を試みることができます:

if($connection->isConnected()) { 
    $connection->disconnect(); 
} 
関連する問題