數據下載工做筆記二:wget下載數據自動化腳本

導師的項目須要一大波數據,據稱至少要幾十個T(吐槽,哪裏有那麼多數據。。。),因而我開始天天在網上找rdf的數據。大多數數據都在國外的服務器上,聯通的PPPoE很不穩定,並且數據集的大小也千差萬別,從幾個K到數十G,用Wget下載數據每次都需不停地去檢查下載狀態,輸出日誌。考慮了一下之後要與這個任務長期爲伴了,因此寫了幾個腳本,讓服務器本身下而且負責監控下載狀態,一旦有下載失敗或者某個數據集下載成功,就短信提醒我。嗯,遇到的問題一一記錄在這裏,腳本寫完以後也貼在這裏。服務器

1. 去重:!a[$0]++ "tmp"spa

tmp中保存了多個記錄,每行一個記錄。記錄有重複。日誌

我將tmp文件中的內容去重後輸出到另一個文件uniq,若是這樣寫:code

  echo ${awk !a[$0]++ "tmp"} > "uniq"blog

會致使uniq中全部記錄都在同一行,若是寫成這樣:進程

  cat "tmp" | awk '!a[$0]++' > "uniq"字符串

就保持了原來的格式,每條記錄一行。get

2. 監控的實現——用msmtp和mutt發送郵件。string

安裝msmtp:class

tar jxf msmtp-1.4.16.tar.bz2
./configure  --prefix=/usr/local/msmtp
make
make install

安裝mutt:

tar zxf mutt-1.5.21.tar.gz
./configure
make
make install

配置msmtp:

cd ~
vi .msmtprc

 host smtp.163.com   #你的郵件服務器地址
 tls off   #關閉tls
 auth plain   #設定登陸方式
 from youraddress@163.com   #發送Email的郵件地址
 user yourname   #發送Email的用戶名
 password yourpassword   #發送Email的用戶名密碼

3. awk默認分隔符是空格、tab、換行等一切空白符號,使用多個字符組成的字符串作分隔符時,用-F參數指定:-F "string1|string2".

4. 因爲腳本之間存在互相調用的關係,可是調用和被調用者的運行時間不必定,因此在調用時要避免由於父進程退出而致使子進程也被同時殺死,用」&「將命令放在後臺執行還不夠,這樣雖然說父進程能夠不等待子進程執行完畢,可是一旦父進程退出,子進程也跟着被殺死(收到父進程發來的hup信號),因此,在調用子腳本前,使用」nohup「。

相關文章
相關標籤/搜索