用户工具

站点工具


rsync多线程简单shell版

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
rsync多线程简单shell版 [2016/11/29 02:42]
harbinbeer
rsync多线程简单shell版 [2016/12/02 02:28]
harbinbeer
行 1: 行 1:
 +=====rsync多线程同步简单shell版====
 ====以目录为单位==== ====以目录为单位====
 <​code>​ <​code>​
行 5: 行 6:
  
 dir='/​www'​ #​需同步的路径 dir='/​www'​ #​需同步的路径
-remoteip='​1.2.3.4.5'​ #目标ip +ip='​1.2.3.4.5'​ #目标ip 
-remoteport='​22'​ #ssh端口+port='​22'​ #ssh端口
 opt='​-auz --delete'​ #rsync 选项 opt='​-auz --delete'​ #rsync 选项
-sshkey='/​path/​to/​key'​ #​ssh秘钥 +key='/​path/​to/​key'​ #​ssh秘钥 
-sshuser='​root'​ #​ssh登录用户+user='​root'​ #​ssh登录用户
 num=20 #"​线程"​(进程)数 num=20 #"​线程"​(进程)数
 depth='​12 11 10 9 8 7 6 5 4 3 2 1' #​归递目录深度 depth='​12 11 10 9 8 7 6 5 4 3 2 1' #​归递目录深度
行 15: 行 16:
 # 创建目标目录结构 # 创建目标目录结构
 rsync $opt --include "​*/"​ --exclude "​*"​\ rsync $opt --include "​*/"​ --exclude "​*"​\
-    ​-e "ssh -p $remoteport ​-i $sshkey"\ + -e "ssh -p $port -i $key"\ 
-    $dir/ $sshuser@$remoteip:$dir/+ $dir/ $user@$ip:$dir/
  
 # 从深到浅同步目录 # 从深到浅同步目录
行 23: 行 24:
  # 启动rsync进程  # 启动rsync进程
  for i in $todo; do  for i in $todo; do
-   now_num=`ps axw | grep rsync | grep $remoteip ​| wc -l` +  ​now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server' ​| wc -l` 
-   ​if [ $now_num -lt $num ]; then +  if [ $now_num -lt $num ]; then 
-    rsync $opt -e "ssh -p $remoteport ​-i $sshkey"\ +   ​rsync $opt -e "ssh -p $port -i $key"\ 
-    $i/ $sshuser@$remoteip:$i/ & +    $i/ $user@$ip:$i/ & 
-    sleep 1 +   ​sleep 1 
-   ​else +  else 
-   ​# 进程达到限定数量延时启动新的rsync +  # 进程达到限定数量延时启动新的rsync 
-    while true; do +   ​while true; do 
-     ​sleep 5 +    sleep 5 
-     ​now_num=`ps axw | grep rsync | grep $remoteip ​| wc -l` +    now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server' ​| wc -l` 
-     ​if [ $now_num -lt $num ]; then +    if [ $now_num -lt $num ]; then 
-       ​rsync $opt -e "ssh -p $remoteport ​-i $sshkey"\ +     ​rsync $opt -e "ssh -p $port -i $key"\ 
-       ​$i/ $sshuser@$remoteip:$i/ & +      $i/ $user@$ip:$i/ & 
-       ​sleep 1 +     ​sleep 1 
-      break +     ​break 
-     ​fi+    fi
     done     done
    fi    fi
-  ​done+ done
 done done
  
 # 最终单进程验证 # 最终单进程验证
-rsync $opt +while true; do 
-    -e "ssh -p $remoteport ​-i $sshkey"\ + sleep 5 
-    $dir/ $sshuser@$remoteip:$dir/ + ​now_num=`ps axw | grep rsync | grep $ip | grep -v '\-\-server'​ | wc -l` 
-     + if [ $now_num -lt 1 ]; then 
-exit 0+  rsync $opt -e "ssh -p $port -i $key"\ 
 +   ​$dir/ $user@$ip:$dir/ 
 +  ​break 
 + fi 
 +done
 </​code>​ </​code>​
 ====以文件为单位==== ====以文件为单位====
行 57: 行 62:
  
 dir='/​www'​ #​需同步的路径 dir='/​www'​ #​需同步的路径
-remoteip='​1.2.3.4.5'​ #目标ip +ip='​1.2.3.4.5'​ #目标ip 
-remoteport='​22'​ #ssh端口+port='​22'​ #ssh端口
 opt='​-auz --delete'​ #rsync 选项 opt='​-auz --delete'​ #rsync 选项
-sshkey='/​path/​to/​key'​ #​ssh秘钥 +key='/​path/​to/​key'​ #​ssh秘钥 
-sshuser='​root'​ #​ssh登录用户+user='​root'​ #​ssh登录用户
 num=20 #"​线程"​(进程)数 num=20 #"​线程"​(进程)数
  
 # 创建目标目录结构 # 创建目标目录结构
 rsync $opt --include "​*/"​ --exclude "​*"​\ rsync $opt --include "​*/"​ --exclude "​*"​\
-    ​-e "ssh -p $remoteport ​-i $sshkey"\ + -e "ssh -p $port -i $key"\ 
-    $dir/ $sshuser@$remoteip:$dir/+ $dir/ $user@$ip:$dir/
  
 # 开始同步文件 # 开始同步文件
行 73: 行 78:
 # 启动rsync进程 # 启动rsync进程
 for i in $todo; do for i in $todo; do
-  ​now_num=`ps axw | grep rsync | grep $remoteip ​| wc -l` + now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server' ​| wc -l` 
-  if [ $now_num -lt $num ]; then + if [ $now_num -lt $num ]; then 
-   ​rsync $opt -e "ssh -p $remoteport ​-i $sshkey"\ +  rsync $opt -e "ssh -p $port -i $key"\ 
-    $i $sshuser@$remoteip:$i & +   ​$i $user@$ip:$i & 
-   ​sleep 1 +  sleep 1 
-  else + ​else 
-  # 进程达到限定数量延时启动新的rsync + # 进程达到限定数量延时启动新的rsync 
-   ​while true; do +  while true; do 
-    sleep 5 +   ​sleep 5 
-    now_num=`ps axw | grep rsync | grep $remoteip ​| wc -l` +   ​now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server' ​| wc -l` 
-    if [ $now_num -lt $num ]; then +   ​if [ $now_num -lt $num ]; then 
-     ​rsync $opt -e "ssh -p $remoteport ​-i $sshkey"\ +    rsync $opt -e "ssh -p $port -i $key"\ 
-      $i $sshuser@$remoteip:$i & +     ​$i $user@$ip:$i & 
-     ​sleep 1 +    sleep 1 
-     ​break +    break 
-    fi +   ​fi 
-   ​done +  done 
-  fi+ fi
 done done
  
 # 最终单进程验证 # 最终单进程验证
-rsync $opt +while true; do 
-    -e "ssh -p $remoteport ​-i $sshkey"\ + sleep 5 
-    $dir/ $sshuser@$remoteip:$dir/ + ​now_num=`ps axw | grep rsync | grep $ip | grep -v '\-\-server' ​ wc -l` 
-  ​+ if [ $now_num -lt 1 ]; then 
 +  rsync $opt -e "ssh -p $port -i $key"\ 
 +   ​$dir/ $user@$ip:$dir/ 
 +  ​break 
 + fi 
 +done 
 +   
 exit 0 exit 0
 </​code>​ </​code>​
/data/vhosts/wiki-data/pages/rsync多线程简单shell版.txt · 最后更改: 2016/12/02 02:28 由 harbinbeer