连接超时?

时间:2018-06-29 15:54:11

标签: ruby net-sftp

我有简单的连接对象

require 'net/sftp'
@con = Net::SFTP.start(@@host, @@username, :password => @@password
...
@con.upload!(filepath, destination)

我在一个脚本中拥有此功能,该脚本可以侦听文件放入文件夹中的情况。收集文件,并将其上传到远程sfpt服务器。一切正常,但在脚本运行足够长时间后,它将中断并抛出此错误:

exception while processing events: Write to the server failed

我只能假设发生这种情况,因为空闲连接在一定时间后会断开连接。 有没有办法使连接无限期打开?还是限制?

如果那不可能,那么我可以解决错误了吗?像这样:

begin
    @con.upload!(filepath, destination)
rescue Net::SFTPStatusException => e
    if e.code == 7 //connection lost code
        @con.{reconnect}//Whatever this would look like
    end
    else
        raise
    end
end

不确定7是否是正确的错误代码,或者如何重新连接连接对象。

1 个答案:

答案 0 :(得分:1)

由于它使用SFTP,即通过SSH代理,因此有可能每X秒发送一次“ ping”以保持连接打开。您可以使用stdpaden = list(itertools.chain(*stdpaden)) while vrnaam not in stdpaden or atnaam not in stdpaden: print("Foute invoer") vrnaam = input("Vul de voornaam van de student in: ") atnaam = input("Vul de achternaam van de student in: ") ServerAliveInterval中的~/.ssh/config进行此操作,例如:

/etc/ssh/sshd_config

还要注意,传递给Host * ServerAliveInterval 240 的所有选项都传递给Net::SFTP.start,因此您可以使用Net::SSH.start之类的options来获取有关正在发生的事情的更多信息。 / p>

另一种选择是在循环中某个目录中执行类似列表文件的操作,该命令等待文件上载以保持连接活动。如果共享与同一主机的SSH连接,则也可以在单独的线程中执行此操作。