Lftp超时与NOOP

  • A+
所属分类:Linux

说到空闲超时,要明白的一点是,任何FTP客户端设定的超时时间都必须参考FTP服务器软件的空闲超时设置,也就是说如果客户端设置的时间值大于服务器端设置的时间值时,FTP客户端上设置的值是没意义的,因为在此之前FTP服务端已经断开了连接. 注意,FTP服务端空闲超时与FTP客户端空闲超时的处理是不一样的,这可以在日志中得到体现,一般来说标准的FTP服务器软件对于本身空闲超时会是一个421代码,按rfc定义为"Connection timed out",而客户端超时首先会发送一QUIT命令,然后服务端返回221成功代码(Goodbye). 如果可以自由调控FTP服务器,最快的方法当然将FTP服务器软件的超时设置调大,然后再来设置客户端软件,很多情况下我们是没有权限来操作FTP服务器软件的,而且我们要的是客户端一直连接而不超时,这个对FlashFXP等windows下地客户端来说设置是很简单的,设置间隔一定时间发送一"NOOP"指令就可以了,当然这个时间间隔得小于服务器的超时时间. 具体到lftp,虽然没有直接的设置选项,但由于lftp功能强大,组合一些命令还是可以实现的

repeat 120 "quote 'NOOP'" &

实质是上每隔120s发送一NOOP指令('&'表示后台运行),repeat和quote都是lftp命令,可以看下lftp的man,lftp默认超时时间是3分钟(180s),所以一定要在超时前发送'NOOP'指令,120s还是有效的,当然,前提是服务端超时值应该比这个要大.
要更改超时设置,可以修改~/.lftprc或者~/.lftp/rc,lftp在启动时会依次执行/etc/lftp.conf ~/.lftprc ~/.lftp/rc,不推荐直接修改/etc/lftp.conf
可以看看~/.lftprc文件中的内容

set net:reconnect-interval-base 10
set net:reconnect-interval-max 300
set net:reconnect-interval-multiplier 2

lftp连接失败后重试间隔由这三个参数决定,连接失败时,重试处理流程基本如下:
1. 如果是第一次重试,net:reconnect-interval-base 第一次连接失败时重试间隔,间隔reconnect-interval-base重试
2. 每次重试间隔为:上次重试间隔 * reconnect-interval-multiplier,当计算出来的重试间隔超过reconnect-interval-max值时,重试间隔又恢复到reconnect-interval-base,相当于跳到了第一步.
下面的设置基本上能保证重试间隔为1s:

set net:reconnect-interval-base 1
set net:reconnect-interval-max 3
set net:reconnect-interval-multiplier 4

在客户端看来,跟一直连接没多大区别,当然最完美的还是用在服务端未断开前发NOOP指令了,如果服务端超时时间比较长,也可以设置lftp的超时间隔

set net:timeout 1h

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: