在前段时间工作中,我们在编写linux搬运脚本程序时遇到了瓶颈;脚本内容如下图

linux服务器间数据搬运1 --- 论高效传输与删除操作(Centos6.x)_高效传输

脚本设计方案:我通过linux的scp远程传输命令,将192.168.121.36机子中的文件传输到本机指定(/home/0912data/)路径下,然后用ssh远程操作192.168.121.36将其指定(/home/0912data/)路径下的文件删除;贴代码~

#!/bin/bash
while true
do

set time 30
ssh root@192.168.121.36 ls /home/0912data/ > ./zuxun36.files

while read file
do
    echo "-----------------------"
    /usr/bin/scp -r root@192.168.121.36:/home/0912data/* /home/0912data/
    echo "scp [$file] to [10.98.33.87] successful!!"
    /usr/bin/ssh root@192.168.121.36 rm -r /home/0912data/*
    echo "mv [$file] to /home/eversec-contentmonitor/0912data_bak/ successful!!"
    #func_scp_to_dev $remote_host $file
    #func_scp_to_mv  $remote_host $file

done < zuxun36.files

rm zuxun36.files
#sleep 5
done

 

问题:

  1. 搬运慢
  2. 有时候删除不掉

 

原因:原本使用的搬运(scp -r)程序原理是一个一个文件搬,效率低,并且删除用rm -rf命令 在文件数量大于一定上限时(实际项目操作中2000个txt文件就会删除失败,抛出list too much)会删除失败;SO,我们使用了半年的搬运程序是存在很大问题的,赶紧处理--->

 

升级后的程序:

        引入了linux中的rsync同步命令,无论在搬运还是删除方面,都是相对最优的,一开始优化时我们使用了强制删除find . -name "*" -exec rm {} \; -print 方式;但是强制删除存在许多不安全因素,后来我们发现了一种效率更高的方法,原理类似于 echo “” xxx.txt ;没错,就是重定向!

        如下图,删除公式的含义为:ssh远程10.92.8.98服务器,将/home/0912data/文件夹下的文件同步到/home/0912clear/文件夹下,然后重定向清空/home/0912clear/文件夹下的同步内容

rsync -a --delete /home/0912clear/ /home/0912data/

后来就有了图中简洁明了的.sh脚本(注意明确文件夹名后面的“/”),错误日志记录都不需要咯。

linux服务器间数据搬运1 --- 论高效传输与删除操作(Centos6.x)_数据搬运_02

贴代码~

#!/bin/bash
/usr/bin/rsync root@192.168.2.164:/home/0912data/* /home/0912data/

/usr/bin/ssh root@192.168.101.40 rsync -a --delete /home/0912clear/ /home/0912data/

 

 

下一篇主要讲述我工作经(zao)历(yu)中遇到的服务器间免密功能搭建问题,以及对某些做传输限制的服务器,用expect做模拟用户输入密码的方式去完成搬运任务