expect不用输密码自动下载数据备份(新)
在上一篇用expect不用输密码自动scp数据(续)中,用了scp去下载数据备份,但最近海底光缆不是断了嘛,并且用scp去down数据只有几十K的速度,实在是太慢了,我们发现用http下载方式速度是很快,最慢也有100+k/s,为了把服务器的数据备份到本地,我对原来的脚本进行了大更改.
这里先说下脚本的实现过程:
1.先在服务器上把备份自动打包到一个web目录下(当然这个web目录其他人无法访问到的),好让脚本去下载.
2.在本地服务器把备份包下载下来,进行解压然后拷贝到专门的备份目录里.
3.当上面两步都完成了,我们就要把服务器上那个备份包删除,避免泄露.
下面是脚本:
1.这个是在服务器上把最新备份筛选出来,并把最新备份打包到web目录:
cat copy_bakfile.sh
2.这是下载备份包脚本(先连到服务器上执行copy_bakfile.sh把最新备份筛选出来,并打包到web目录,并把打包好的bak.tar.gz下载到本地)
cat down.exp
3.这是解压备份包脚本
cat process.sh
ps:相信大家都知道怎么确认是否有下载完,这个脚本就起到检查down.exp是否有下载完,确认下载完了才解压bak.tar.gz,并把解压出来的拷贝到专门的备份目录里,并执行删除脚本去删除服务器上web目录里的bak.tar.gz包.
4.这是删除服务器上bak.tar.gz包的脚本
cat delbak.exp
最后说一句,要使用上面这几个脚本,记得先安装axel和expect这两个工具,不然你是无法把备份包down下来的.
这里先说下脚本的实现过程:
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下来的.
评论: