【问题标题】:Laravel - How to check if (SSH) Socket is Alive?Laravel - 如何检查(SSH)套接字是否活着?
【发布时间】:2017-01-06 21:02:36
【问题描述】:

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

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

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

这运行良好,但大约一个小时后连接丢失。

如何在 Laravel (v5.2) 中检查连接是否存在,如果没有自动连接?

【问题讨论】:

  • 你可以使用 netstat -tlpan,然后在你指定的端口上寻找一个连接,如果连接仍然存在,它应该是 ESTABLISHED。
  • 是的,我现在使用的是:netstat -lpnt | grep 13306 | grep ssh 在 Laravel 中有更好的方法来检查这个吗?
  • 什么时候 Laravel 甚至没有启动 ssh 会话?不见得。如果你使用 Laravel 的 SSH::run() 方法,Laravel 可能会给你 STDERR 输出,但这只是猜测。

标签: php laravel ssh laravel-5.2


【解决方案1】:

如果“mysql 消失”或“丢失连接”,您可以尝试捕获 PDOException 并重新连接到服务器。代码可能如下所示:

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

您很可能必须在 Laravel \DB::select、更新、插入上编写自己的包装器才能在一个地方重新连接。

【讨论】:

    【解决方案2】:

    解决方案:

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

    2) 使用异步方法:使用控制台 (bash/php) 脚本检查 ssh 端口,当某些数据库表中没有设置“ssh not allowed”标志时,您可以在 PHP 代码中检查该字段,并且,如果需要,您可以设置其他一些数据库标志,例如“重新启动 ssh”,并使用 Linux Cron 定期检查数据库中的此标志,如果找到该标志,则重新启动 ssh。

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 2013-02-26
      • 2016-03-07
      • 2019-09-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 2018-06-10
      相关资源
      最近更新 更多