天天看点

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,如需转载请自行联系原作者

继续阅读