我有简单的连接对象
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是否是正确的错误代码,或者如何重新连接连接对象。
答案 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连接,则也可以在单独的线程中执行此操作。