Laravel中Envoy和SSH的间歇性问题

时间:2014-04-25 13:18:41

标签: php laravel ssh phpseclib

我最近在Laravel 4.1中一直在使用SSH远程组件和Envoy,我遇到了两个问题。我们有10多台服务器,我正在寻找通过Envoy或Laravel中的SSH组件部署更新。

首先是SSH - 我在app/config/remote.php内设置了它,并将服务器声明为一个组。作为测试,我想循环遍历每个服务器,只返回主机名,以确保它们都连接好。我可以在app/routes.php

中执行此操作
Route::get('/test', function(){

    $commands = array(
        'hostname'
    );

    $servers = Config::get('remote.groups.servers');

    foreach($servers as $server){
        SSH::into($server)->run($commands,function($output){
            echo $output.PHP_EOL;
        });
    }

});

然而,每运行2到3次我运行这个脚本我都会收到错误,虽然在哪个服务器错误方面都没有模式,但每次都不会发生 - 有时候工作正常。

我得到的错误是:

  

无法连接到192.168.0.1:8899。横幅超时

(其中192.168.0.1是我的服务器IP)

所以,我有一个间歇性的问题,但它足以表示我不能依赖此功能进行可靠的部署,除非我修复它。我对错误进行了一些调查,它来自 phpseclib ,但大多数提到我看到的似乎暗示这已被修复。但是,我在这里感到困惑的是,如果有人,我应该报告此错误。它是phpseclib的问题,还是Laravel的问题,或我的服务器的问题或本地机器的问题(运行Mavericks的新rMPB,但也在运行CentOS 6.4的流浪盒上看到)。

我决定在此之后查看特使,看看这是否会更好。简而言之,我也有类似的问题。我不确定究竟是什么问题因为Envoy似乎在没有显示任何错误的情况下默默地失败但是在envoy上运行的类似脚本(只是为了返回基本类似“ls -l”或“hostname”的输出)有时工作,有时失败 - 我必须按CTRL + C命令停止它。

我认为在引擎盖下Envoy使用相同的SSH代码,因此问题属于两者。

有没有其他人看过这些问题,有人可以推荐我如何解决这个问题吗?

修改

在此之后通过SSH2.php(在phpseclib内)

中抛出错误
if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {           
      user_error(rtrim("Cannot connect to $host. Banner timeout"));
      return false
 }

似乎由于某种原因$read在发生此问题后将为空 - 它在调用stream_select之前有一个值,但之后为空。成功调用后,将保留该值。不知道那意味着什么!

感谢。

0 个答案:

没有答案