2016-08-30 3 views
2

私はMySQLを備えたリモートサーバを持っています。別のサーバでは、リモートMySQLに接続する必要があります(Laravel 5.2経由)。Laravel - (SSH)ソケットが生きているかどうかを確認する方法?

ssh -N -L 13306:127.0.0.1:3306 -pXXX *****@serverName.com 

これがうまく機能しているが、程度時間後に接続が失わ:今サーバー(Ubuntuの14.04)で、私はコマンドを使って手動で接続するため

どのようにLaravel(v5.2)で接続が有効かどうかを確認し、自動的に接続しない場合はどうすればいいですか?

+0

netstat -tlpanを使用して、指定したポートで接続を探して、接続がまだ生きている場合はESTABLISHEDする必要があります。 –

+0

はい私は今のように使います: 'netstat -lpnt |グレープ13306 | grep ssh' これを確認するにはLaravelの方がいいですか? – SoftItDo

+0

Laravelがsshセッションを開始しなかったときは?そうは思わない。 LaravelのSSH :: run()メソッドを使用した場合、LaravelはSTDERRの出力を得ることができるかもしれませんが、それは単なる推測です。 –

答えて

0

ソリューション:

1)()はssh /のtelnetコマンドによってコールチェックsshのポートを標準PHPコマンド "システム"(http://php.net/manual/en/function.system.php)を使用します。この方法でサービスをダイレクトに再起動できるかどうかは不明です。

2)非同期メソッドを使用する:sshポートを確認するためにコンソール(bash/php)スクリプトを使用し、一部のデータベーステーブルに「sshが許可されていません」フラグが設定されていない場合にこのフィールドをPHPでチェックすることができます必要に応じて "restart the ssh"のような他のデータベースフラグを設定し、Linux Cronを使用してこのフラグをデータベースで定期的にチェックし、フラグが見つかったらsshを再起動します。

0

「mysqlがなくなった」または「接続が失われた」場合は、PDOExceptionをキャッチしてサーバーに再接続できます。コードは次のようになります。

 try { 
      \DB::select("SELECT version()"); 
     } catch(\PDOException $e) { 
      if (in_array($e->getCode(), [2002, 2013, 2006])) { 
       \DB::reconnect(); 
      } 
     } 

おそらくあなたは:: Laravel \ DBに独自のラッパーを書くSELECT、UPDATE、一つの場所に再接続をするために挿入する必要があります。

関連する問題