expect不用输密码自动下载数据备份(新)

post by rocdk890 / 2014-3-28 17:13 Friday linux技术
  在上一篇用expect不用输密码自动scp数据(续)中,用了scp去下载数据备份,但最近海底光缆不是断了嘛,并且用scp去down数据只有几十K的速度,实在是太慢了,我们发现用http下载方式速度是很快,最慢也有100+k/s,为了把服务器的数据备份到本地,我对原来的脚本进行了大更改.
  这里先说下脚本的实现过程:
1.先在服务器上把备份自动打包到一个web目录下(当然这个web目录其他人无法访问到的),好让脚本去下载.
2.在本地服务器把备份包下载下来,进行解压然后拷贝到专门的备份目录里.
3.当上面两步都完成了,我们就要把服务器上那个备份包删除,避免泄露.

下面是脚本:
1.这个是在服务器上把最新备份筛选出来,并把最新备份打包到web目录:
cat copy_bakfile.sh
#!/bin/bash
location="/root/sqlbak/"
newfile="/root/newfile"
file='/root/newfile'
web="/var/www/vhosts/wwwroot/phpmyadmin"
rm -f ${file}/*
#file=$(find $location -type f -mtime -1)
file=$(find $location -type f -mmin -60)
\cp $file $newfile
sleep 3
ls -l $newfile |awk '{print $9}'|xargs tar -C $newfile/ -czf $web/bak.tar.gz


2.这是下载备份包脚本(先连到服务器上执行copy_bakfile.sh把最新备份筛选出来,并打包到web目录,并把打包好的bak.tar.gz下载到本地)
cat down.exp
#!/usr/bin/expect -f
set timeout -1
set passwd PASSWORD
spawn ssh -p18330 root@124.248.xxx.xxx
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "*#*" { send "sh /root/soft_shell/copy_bakfile.sh\r" }
expect "*#*" { send "exit\r" }
spawn axel -q https://blog.slogra.com/bak.tar.gz -o /root/sqlbak/
expect eof


3.这是解压备份包脚本
cat process.sh
#!/bin/bash
pid=`ps -C axel --no-header|wc -l`
file=`find /root/sqlbak/ -name bak.tar.gz.st|wc -l`
list="/root/sqlbak"
newfile="/data/onlinesqlbak"
date="`date '+%Y-%m-%d %H:%M:%S'`"
if [[ $pid -eq 0 ]] || [[ $file -eq 0 ]];then
expect /root/soft_shell/delbak.exp
#tar zxf $list/*
tar zxf $list/* -C $newfile/
sleep 10
rm -f $list/bak.*
#for i in $list/*;do cp -r $i $newfile/;done
#sleep 1
#rm -f $list/*.gz
else
echo "$date | load download....." >>/root/processlog.txt
fi


ps:相信大家都知道怎么确认是否有下载完,这个脚本就起到检查down.exp是否有下载完,确认下载完了才解压bak.tar.gz,并把解压出来的拷贝到专门的备份目录里,并执行删除脚本去删除服务器上web目录里的bak.tar.gz包.

4.这是删除服务器上bak.tar.gz包的脚本
cat delbak.exp
#!/usr/bin/expect -f
set timeout -1
set passwd PASSWORD
spawn ssh -p18330 root@124.248.xxx.xxx
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "*#*" { send "rm -f /var/www/vhosts/wwwroot/phpmyadmin/bak.tar.gz\r" }
expect "*#*" { send "exit\r" }
expect eof


最后说一句,要使用上面这几个脚本,记得先安装axel和expect这两个工具,不然你是无法把备份包down下来的.
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-517.html

标签: 删除 脚本 下载 expect 自动 axel 拷贝

评论: