2016-04-27 9 views
1

Ich habe ein Shell-Skript, das kontinuierlich auf einer Schleife läuft.cakephp 3.1 mysql ist weggegangen

Es prüft die Datenbank auf Datensätze und ändert sie bei Bedarf.

 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); 
     } 

Problem das ich habe, ist dieses Skript auszuführen scheint ok, aber dann wird zufällig werfen: ‚2006 MySQL-Server weggegangen hat:‘ Ich habe versucht, einige Sachen in der Ausnahme Fang zu setzen, um wieder zum mySQL-Server wie zum Beispiel:

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

Irgendwelche Vorschläge, wie man die DB verbinden?

+0

ich ein ähnliches Problem konfrontiert bin, müssen wir, um die Ursache zu bekommen davon sollte dies idealerweise nicht passieren :( –

Antwort

1

Ich hatte ein ähnliches Problem, wo die Shell in einer Endlosschleife läuft.

Fügen Sie die Verwendung für die Connectionmanager:

use Cake\Datasource\ConnectionManager; 

die Verbindung vor der Schleife holen:

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

In der Schleife, kurz bevor Sie zum ersten Mal die Verbindung benötigen, prüfen Sie, ob Sie noch verbunden sind und führen Sie eine Verbindung, wenn Sie nicht verbunden sind:

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

Wenn Ihre Shell ha sa Zustand, in dem sie für eine längere Zeit warten, könnten Sie versuchen, manuell zu trennen und Sie eine neue Verbindung, wenn Sie die Verbindung wieder brauchen:

if($connection->isConnected()) { 
    $connection->disconnect(); 
}