如何检查(SSH)套接字是否活着


Laravel - How to check if (SSH) Socket is Alive?

我有一个MySQL远程服务器。在另一个服务器上我需要连接到远程MySQL(通过Laravel 5.2)。

现在在服务器(Ubuntu 14.04)我手动连接命令:

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

工作正常,但是大约一个小时后连接丢失。

如何在Laravel (v5.2)我可以检查如果连接是活的,如果没有自动连接?

解决方案:

1)使用标准的PHP命令"system"(http://php.net/manual/en/function.system.php)调用检查ssh端口(通过ssh/telent命令)。不确定此方法是否允许直接重启服务。

2)使用异步方法:使用控制台(bash/php)脚本检查ssh端口,当它不是在某些数据库表中设置的"ssh不允许"标志时,然后您可以在php代码中检查该字段,并且,如果需要,您可以设置一些其他数据库标志,如"重新启动ssh",并使用Linux Cron定期检查数据库中的此标志,如果发现该标志则重新启动ssh。

您可以尝试捕获PDOException,如果'mysql消失'或'失去连接',并重新连接到服务器。代码看起来像这样:

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

很可能你将不得不在Laravel 'DB::select, update, insert上编写自己的包装器来在一个地方重新连接。