集群分发脚本xsync.sh

xsync.sh

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in centos701 centos702 centos704
do
  echo ====================  $host  ====================
  #3. 遍历所有目录,挨个发送
  for file in $@
  do
    #4 判断文件是否存在
    if [ -e $file ]
    then
      #5. 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 获取当前文件的名称
      fname=$(basename $file)
      #7. 远程创建父文件夹
      ssh $host "mkdir -p $pdir"
      #8. 使用rsync归档
      rsync -avP $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done

说明:

1 第7步:远程创建父文件夹
如果不创建文件夹,直接执行rsync /dir/file host:/dir那么结果是远程机器的dir不是对应的本地的dir文件夹,而是存储的file文件的内容。
2 第8步:使用rsync归档为什么使用$pdir/$fname而不直接使用$file
例如rsync -avP ./1/ 归档的是1/内部的文件夹,而不包含1本身。我们希望当使用xsync ./1/时,归档包含1本身。那么就需要使得当执行xsync ./1/时,内部执行的是 rsync -avp ./1

xcall.sh

#! /bin/bash
 
for i in centos701 centos702 centos704
do
    echo --------- $i ----------
    ssh $i "$*"
done

你可能感兴趣的:(大数据,linux)