用户工具

站点工具


rsync多线程简单shell版

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
rsync多线程简单shell版 [2016/11/29 12:12]
harbinbeer
rsync多线程简单shell版 [2016/12/02 02:28] (当前版本)
harbinbeer
行 1: 行 1:
 +=====rsync多线程同步简单shell版====
 +====以目录为单位====
 +<​code>​
 +#!/bin/sh
 +PATH="/​sbin:/​bin:/​usr/​sbin:/​usr/​bin:/​usr/​games:/​usr/​local/​sbin:/​usr/​local/​bin:/​root/​bin"​
 +
 +dir='/​www'​ #​需同步的路径
 +ip='​1.2.3.4.5'​ #目标ip
 +port='​22'​ #ssh端口
 +opt='​-auz --delete'​ #rsync 选项
 +key='/​path/​to/​key'​ #ssh秘钥
 +user='​root'​ #​ssh登录用户
 +num=20 #"​线程"​(进程)数
 +depth='​12 11 10 9 8 7 6 5 4 3 2 1' #​归递目录深度
 +
 +# 创建目标目录结构
 +rsync $opt --include "​*/"​ --exclude "​*"​\
 + -e "ssh -p $port -i $key"\
 + $dir/ $user@$ip:​$dir/​
 +
 +# 从深到浅同步目录
 +for l in $depth ;do
 + ​todo=`find $dir -maxdepth $l -mindepth $l -type d`
 + # 启动rsync进程
 + for i in $todo; do
 +  now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server'​ | wc -l`
 +  if [ $now_num -lt $num ]; then
 +   rsync $opt -e "ssh -p $port -i $key"\
 +    $i/ $user@$ip:​$i/​ &
 +   sleep 1
 +  else
 +  # 进程达到限定数量延时启动新的rsync
 +   while true; do
 +    sleep 5
 +    now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server'​ | wc -l`
 +    if [ $now_num -lt $num ]; then
 +     rsync $opt -e "ssh -p $port -i $key"\
 +      $i/ $user@$ip:​$i/​ &
 +     sleep 1
 +     break
 +    fi
 +    done
 +   fi
 + done
 +done
 +
 +# 最终单进程验证
 +while true; do
 + sleep 5
 + ​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
 +</​code>​
 +====以文件为单位====
 +<​code>​
 +#!/bin/sh
 +PATH="/​sbin:/​bin:/​usr/​sbin:/​usr/​bin:/​usr/​games:/​usr/​local/​sbin:/​usr/​local/​bin:/​root/​bin"​
 +
 +dir='/​www'​ #​需同步的路径
 +ip='​1.2.3.4.5'​ #目标ip
 +port='​22'​ #ssh端口
 +opt='​-auz --delete'​ #rsync 选项
 +key='/​path/​to/​key'​ #ssh秘钥
 +user='​root'​ #​ssh登录用户
 +num=20 #"​线程"​(进程)数
 +
 +# 创建目标目录结构
 +rsync $opt --include "​*/"​ --exclude "​*"​\
 + -e "ssh -p $port -i $key"\
 + $dir/ $user@$ip:​$dir/​
 +
 +# 开始同步文件
 +todo=`find $dir -maxdepth $l -mindepth $l -type d`
 +# 启动rsync进程
 +for i in $todo; do
 + ​now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server'​ | wc -l`
 + if [ $now_num -lt $num ]; then
 +  rsync $opt -e "ssh -p $port -i $key"\
 +   $i $user@$ip:​$i &
 +  sleep 1
 + else
 + # 进程达到限定数量延时启动新的rsync
 +  while true; do
 +   sleep 5
 +   ​now_num=`ps axw | grep rsync | grep $ip | grep -v '​\-\-server'​ | wc -l`
 +   if [ $now_num -lt $num ]; then
 +    rsync $opt -e "ssh -p $port -i $key"\
 +     $i $user@$ip:​$i &
 +    sleep 1
 +    break
 +   fi
 +  done
 + fi
 +done
 +
 +# 最终单进程验证
 +while true; do
 + sleep 5
 + ​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
 +</​code>​
 +水平有限,欢迎指正。
 +
  
/data/vhosts/wiki-data/pages/rsync多线程简单shell版.txt · 最后更改: 2016/12/02 02:28 由 harbinbeer