聶林波
摘要:針對Linux環(huán)境下自動下載FTP服務(wù)器數(shù)據(jù)文件需要,提出用shell腳本程序?qū)崿F(xiàn)數(shù)據(jù)自動下載功能。該方法將Linux系統(tǒng)的crontab命令、date命令、shell腳本和wget軟件有機結(jié)合實現(xiàn)FTP數(shù)據(jù)的自動下載。Linux系統(tǒng)能定時自動運行shell腳本調(diào)用wget軟件自動下載數(shù)據(jù)文件。在Linux系統(tǒng)下靈活組合各種命令能夠低成本實現(xiàn)復雜功能。
關(guān)鍵詞:Linux;crontab;shell;wget;定時;下載
中圖分類號:TP316 文獻標識碼:A 文章編號:1009-3044(2016)30-0248-01
The Method to Download Files Automatically Form FTP Website on Linux System
NIE Lin-bo
(The Ocean Meteorological and Hydrological Center of South China Sea Fleet, Zhanjiang 524001, China)
Abstract: to fulfill the need of download data file from FTP server automatically, the method was proposed which can download file at regular time everyday using shell scripts. The method combined crontab, date, shell scripts and wget command to realize the task of downloading file automatically. Linux can run shell scripts to download file on FTP server at regular time. The complicated function can be realized by combining a sort of commands organically.
Key words: Linux; crontab; shell; wget; timing; download
1 需求的提出
在工作中遇到這樣的情況,需要從FTP網(wǎng)站自動下載數(shù)據(jù)文件。這些文件每天會自動產(chǎn)生并保存在按日期建立的文件夾中,文件名包含有日期等信息。每天生成的文件數(shù)以百計。如果手工下載,效率很低??紤]到這些特點,必須采用軟件自動下載。
2 實現(xiàn)的方法
在Linux下有個軟件wget可以實現(xiàn)從網(wǎng)站下載文件。要實現(xiàn)自動下載,最經(jīng)濟的方法是使用crontab命令定時執(zhí)行wget命令即可無需人工干預自動運行。要使wget能根據(jù)日期變化自動改變下載目錄和文件名,就需要編寫shell腳本來實現(xiàn)。Shell腳本自動根據(jù)當前時間產(chǎn)生需要的日期和時間參數(shù),wget利用這些參數(shù)下載相應的數(shù)據(jù)文件。
3 關(guān)鍵技術(shù)
3.1 Wget
wget是一個下載文件的軟件,它以命令行方式執(zhí)行下載任務(wù)。wget工具體積小但功能完善。wget有以下功能和特點:
1)支持斷點下傳功能。當網(wǎng)絡(luò)中斷恢復后,wget可以繼續(xù)之前的下載任務(wù),無需重新下載。
2)支持FTP和HTTP下載方式。
3)支持代理服務(wù)器。
4)設(shè)置方便,只要指定參數(shù),即完成設(shè)置,適合程序化運行。
5)軟件免費。
wget基本的語法是:wget [參數(shù)列表] URL
使用如下命令行下載FTP服務(wù)器數(shù)據(jù):
wget -O fileN--ftp-user=USERNAME --ftp-password=PASSWORD url
FTP服務(wù)器用戶名和密碼分別為USERNAME和PASSWORD。數(shù)據(jù)文件由url指定,參數(shù)O指定數(shù)據(jù)文件以fileN為文件名保存。
3.2 crond
crond是Linux下用來周期性地執(zhí)行某種任務(wù)或等待處理某些事件的一個守護進程, crond進程每分鐘會定期檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動執(zhí)行該任務(wù)。使用 crontab –e命令來定制自己的計劃任務(wù),用crontab –l命令顯示計劃任務(wù)列表。所有用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。crontab文件中,每一行代表一項任務(wù),每行的每個字段代表一項設(shè)置,它的格式共分為六個字段,前五段是時間設(shè)定段,第六段是要執(zhí)行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分鐘,可以是從0到59之間的任何整數(shù)。hour:表示小時,可以是從0到23之間的任何整數(shù)。day:表示日期,可以是從1到31之間的任何整數(shù)。month:表示月份,可以是從1到12之間的任何整數(shù)。week:表示星期幾,可以是從0到7之間的任何整數(shù),這里的0或7代表星期日。command:要執(zhí)行的命令,可以是系統(tǒng)命令,也可以是自己編寫的腳本文件。
3.3 shell
是用戶和Linux內(nèi)核之間的接口程序。shell是一個命令語言解釋器,它擁有自己內(nèi)建的shell命令集,shell也能被系統(tǒng)中其他應用程序所調(diào)用。用戶在提示符下輸入的命令都由shell先解釋然后傳給Linux核心。Shell也是一個解釋型的程序設(shè)計語言,shell程序設(shè)計語言支持絕大多數(shù)在高級語言中能見到的程序元素,如函數(shù)、變量、數(shù)組和程序控制結(jié)構(gòu)。高級語言中常見的判斷、選擇、循環(huán)結(jié)構(gòu),shell也具備。Shell腳本將一系列的Linux命令組合起來即可實現(xiàn)通常需要用高級語言編程實現(xiàn)的各種復雜任務(wù)。
3.4 date命令
Linux下的date命令比windows下的date命令功能更強大。通過下面的shell語句可以對當前時間進行計算,得到指定日期和時間字符串,從而實現(xiàn)數(shù)據(jù)文件路徑和名稱的自動生成。
stringyear=`date --date="1 days ago" +%Y`
stringmonth=`date --date="1 days ago" +%m`
stringday=`date --date="1 days ago" +%d`
4 結(jié)束語
該方法將Linux系統(tǒng)的crontab命令、date命令、shell腳本和wget軟件有機結(jié)合實現(xiàn)FTP數(shù)據(jù)的自動下載。對于大量數(shù)據(jù)文件下載任務(wù),運用這種方法可以實現(xiàn)數(shù)據(jù)自動高效下載。在Linux系統(tǒng)下靈活組合各種命令能夠低成本實現(xiàn)復雜功能。這種下載技術(shù)存在不足,在于wget只能處理利用用戶名/密碼方式限制訪問的網(wǎng)站,對于需要證書做認證的網(wǎng)站,就只能利用其他下載工具。
參考文獻:
[1] 門佳. Linux Shell腳本攻略[M]. 2版. 北京: 人民郵電出版社, 2014.
[2] 王軍. Linux系統(tǒng)命令及Shell腳本實踐指南[M]. 北京: 機械工業(yè)出版社, 2013.
[3] 趙哲. 用Shell函數(shù)實現(xiàn)定時關(guān)機[J]. 科技情報開發(fā)與經(jīng)濟, 2008(28).
[4] 韓璐. 在UNIX系統(tǒng)下用shell編程實現(xiàn)對文件的操作[J]. 中國科技信息, 2006(13).