天天看點

expect自動上傳目錄到FTP伺服器

    客戶需求:在/home/installer目錄下會每天生成一個目錄(日期格式),需要每天定時把這些目錄上傳到雲伺服器指定目錄下(FTP)

    思路:crontab添加任務計劃,需要自動登入ftp伺服器,是以需要expect來自動輸入賬号密碼,

    解決方案:

    1:下載下傳所需要的工具包:expect,lftp(直接yum下載下傳即可,此步忽略)

    2:編輯expect腳本,vim /home/install/back.expect   

<code>#!/usr/bin/expect</code>

<code>set</code> <code>FTP_IP 192.168.1.10</code>

<code>set</code> <code>user installer</code>

<code>set</code> <code>passwd</code> <code>installer</code>

<code>set</code> <code>timeout 15</code>

<code>set</code> <code>date</code> <code>[ </code><code>exec</code> <code>date</code> <code>+%F ]</code>

<code># 引用date時間,要不然無法擷取每天日期</code>

<code>set</code> <code>seven_ago [ </code><code>exec</code> <code>date</code> <code>-d </code><code>"+7 day ago"</code> <code>+%F ]</code>

<code># 擷取7天前日期,做定時删除用,"+7 day ago"必須用雙引号,否則會出錯</code>

<code>set</code> <code>ftp_dir </code><code>/home/install/back</code>

<code>set</code> <code>local_dir </code><code>/home/install</code>

<code>spawn </code><code>/usr/bin/lftp</code> <code>$user:$</code><code>passwd</code><code>@$FTP_IP</code>

<code>expect {</code>

<code># 切換到需要備份到ftp的目錄</code>

<code>"*@$FTP_IP:~&gt;"</code> <code>send { </code><code>"cd $ftp_dir\r"</code> <code>}</code>

<code>}</code>

<code># 上傳本地目錄裡的當天目錄,-c是續傳,-R是上傳,-e是同步上傳的目錄裡面資料,-L是把軟連結内容上傳</code>

<code>"*$ftp_dir&gt;"</code> <code>send { </code><code>"mirror -RLec $local_dir/$date\r"</code> <code>}</code>

<code># 上傳本地目錄裡的ZIP檔案</code>

<code>"*$ftp_dir&gt;"</code> <code>send { </code><code>"put $local_dir/$date\r"</code> <code>}</code>

<code># 删除ftp目錄裡7天前的目錄</code>

<code>"*$ftp_dir&gt;"</code> <code>send { </code><code>"rm -rf $seven_ago\r"</code> <code>}</code>

<code>} </code>

<code>expect eof</code>

<code>exit</code>

    3:将腳本寫到任務計劃裡,比如每天晚上10點上傳

    0 22 * * * /usr/bin/expect /home/installer/back.expect

    4:然後啟動任務計劃

    /etc/init.d/crontab start

本文轉自 運維國小生 51CTO部落格,原文連結:http://blog.51cto.com/yasar/1874130,如需轉載請自行聯系原作者

繼續閱讀