Lftp超時與NOOP

Lftp超時與NOOP

本文來自:說到空閒超時,要明白的一點是,任何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 
發佈了24 篇原創文章 · 獲贊 13 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章