【问题标题】:league/sftp Connection closed prematurely联赛/sftp 连接过早关闭
【发布时间】:2017-02-16 22:59:17
【问题描述】:

我有一个用 php 编写的由主管控制的长期进程,它是一个 Laravel 命令在 redis 频道上监听。当数据到达时,它使用 leagure/sftp 库通过 SFTP 将数据从通道推送到另一台服务器。问题是在启动进程后大约12小时内才能正常工作,然后开始返回以下错误:

文件: /var/www/html/hub/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php

线路:3416

代码:0

消息:连接过早关闭

该过程需要重新启动12小时才能正常工作。

你们有什么想法吗?

【问题讨论】:

  • 发布日志文件。默认情况下,phpseclib 将它们限制为 1mb。您可以通过在顶部执行define('NET_SSH2_LOGGING', 2) 来获取它们,然后在遇到该错误时执行$ssh->getLog()。也许您可以做的是编写一个错误处理程序,只要“捕获”这种错误,就会生成日志文件。然后,获得日志文件后,将其发布到 pastebin.org。

标签: php laravel laravel-5 sftp phpseclib


【解决方案1】:

每次访问SFTP服务器前重新连接即可解决问题:

/**
             * @var \Illuminate\Filesystem\FilesystemAdapter $disk
             */

            $adapter = $disk->getDriver()->getAdapter();
            $adapter->disconnect();
            $adapter->connect();

【讨论】:

  • 我遇到了这个修复,想知道​​是否对此有任何解释?
  • @RobertFridzema 显然远程服务器在超时后关闭了连接,客户端需要重新连接
  • 我现在使用这个修复程序已经有几个星期了,而且似乎大部分时间都可以工作,但在随机时间它会抛出错误 fputs(): send of 52 bytes failed with errno=32 Broken管道上线$adapter->disconnect();
【解决方案2】:

这里的主题是否相同?

[Perl][net::ssh2] How to keep the ssh connection while executing remote command

另一种解决方案是在 12 小时之前重新对服务器进行身份验证。

【讨论】:

  • 不,看起来不一样。并且联盟/sftp 适配器没有任何要重新授权的 api。奇怪的是为什么它工作了一整天,晚上就开始失去连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 2014-11-09
  • 2019-05-10
  • 1970-01-01
  • 2014-07-22
相关资源
最近更新 更多