• 并行rsync


    #!/bin/bash
    
    if [ $# -le 2 ]; then
        echo -e "usage  : 
    	$0 hostList src_file dst_path"
        echo -e "example: 
    	$0 hostList file.txt /home/work/opdir"
        exit 1
    fi
    
    # concurrent number by default.
    CON_NUM=9
    host_list=$1
    shift
    
    src=''
    while [ $# -gt 1 ]; do
        src="$src $1"
        shift
    done
    dst=$1
    
    echo "src: $src"
    echo "det: $dst"
    
    
    if [ ! -f $host_list ]; then
        echo "$host_list is not exist!"
        exit 2
    fi
    
    function your_cmd() {
        host=$1
        #echo -e "---- cmd() start to : $host --"
        CMD="scp -r ${src} ${host}:${dst} 2>/dev/null"
        eval ${CMD}
        ret=$?
        if [ $ret -ne 0 ];then
            echo -e "	$host: cmd return retry $ret"
        fi
    }
    
    function concurrent()
    {
        # ff_file which is opened by fd 4 will be really removed after script stopped
        mkfifo   ./fifo.$$ &&  exec 4<> ./fifo.$$ && rm -f ./fifo.$$
    
        # initial fifo: write $con_num line to $ff_file
        for ((i=1; i<=$CON_NUM; i++)); do
            echo "init:$i" >&4  # init fifo
        done
    
        for host in $(cat $host_list | grep -v "^#"); do
            read -u 4   # read from fifo to REPLY
            {   
                #echo -e "
    -- current loop for: "$host" [ fifo id: "$REPLY" ]"
                your_cmd  "$host"
                echo -e "---- done: $host ----
    "
                echo "real:$host"  1>&4 # write to $fifo
            } & # & to backgroud each process in {}
        done
        wait    # wait all con-current cmd in { } been running over
    }
    
    concurrent 
  • 相关阅读:
    Docker03-镜像
    Docker02:Centos7.6安装Docker
    Docker01-重要概念
    WEB开发新人指南
    Lpad()和Rpad()函数
    Unable to find the requested .Net Framework Data Provider. It may not be installed
    redis自动过期
    redis简单的读写
    redis的安装
    Ajax缓存,减少后台服务器压力
  • 原文地址:https://www.cnblogs.com/tengfei520/p/7843868.html
Copyright © 2020-2023  润新知