2014-01-17 172 views
1

我使用shell腳本通過FTP傳輸文件,我的外殼工作正常。 但問題是我的shell腳本掛起,如果FTP連接在傳輸之間下降,則不會退出。使用Shell腳本自動化FTP

這就是我的shell腳本的外觀。

echo "open $ip" > ${cmd_File} 
echo "user $usrnm $psswd" >> ${cmd_File} 
echo "cd $location" >> ${cmd_File} 
echo "binary" >> ${cmd_File} 
echo "put $filename" >> ${cmd_File} 
echo "bye" >> ${cmd_File} 

progress=$(ftp -vin < ${cmd_File} 2>&1) 1> /dev/null 

我會很高興,如果有人可以幫我處理錯誤,除非連接之間滴在我的代碼的作品真的很好。 這段代碼確實只在那裏掛起,當這種事情發生時,我需要退出代碼。

感謝, 作者Abhijit

回答

0

考慮重寫你的腳本使用「期望」,你可以設置一個時間到。一個例子是here。另一個例子是here

EDITED

或者,你可以做錯誤檢查在Perl很容易,像this

好吧,你可以使用的東西沿着這些路線做的外殼:

YOURTFPCMD & PID=$! ; (sleep $TIMEOUT && kill $PID 2> /dev/null &) ; wait $PID 

這將啓動您的FTP命令,並保存其PID。它們立即啓動一個子shell,如果它沒有完成,它會在$ TIMEOUT秒後終止你的FTP命令,然後等待你的FTP命令退出。

+0

對不起老兄,但需要在殼牌公司做 – user3206005

+0

現在怎麼樣?好點? –

+0

謝謝Dude ...它的工作很好現在 – user3206005

0

使用-q quittime選項在ftp命令:

按照MN的ftp:

-q quittime 
      Quit if the connection has stalled for quittime seconds. 

試試這個命令如:

progress=$(ftp -q 30 -vin < ${cmd_File} 2>&1) 1> /dev/null 
+0

FTP -q 30提示我「ftp:q:未知選項」 – user3206005

+0

嗯,這可能會因ftp客戶端版本而異。你在哪個系統上? – anubhava

+0

Linux Nextgen 2.6.32-279.el6.x86_64#1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux – user3206005

1

我解決了它使用lftp而不是ftp

在我的情況下,我試圖上傳GoDaddy Online Storage FTP上的文件。由於某種原因,最大文件(500 MB)的傳輸永遠懸掛下來。

安裝它像往常一樣(出現在主發行版): yum install lftp(CentOS的) zypper install lftp(openSUSE的) ...

然後創建腳本:

#!/bin/sh 
echo FTP begin at : $(date) 
lftp -u myUser,myPassword myFTPSite <<EOF 
put myfile.gz 
bye 
EOF 
echo $(date) : FTP ended 

echo Validating RAID 
cat /proc/mdstat 
exit 0 
+0

感謝您指點我lftp :) – Sam