Linux之rsync同步分发脚本编写.

前置知识

rsync 可以在当前机器用SSH命令登录别的机器来操作别的机器执行指定的命令

登录并且执行命令, 给命令结果返回回来,注意登录人的标识
ssh root@zjj102 ls /usr/local
给 zjj102机器上的/usr/local 路径下的内容打印出来了.

[root@zjj101 soft]#  ssh root@zjj102 ls /usr/local
apache-tomcat-8.5.38
sentinelLog.log
share
src
startUpSentinel.sh
[root@zjj101 soft]# 

编写分发脚本

如果多个机器同步文件的话你不可能去手动挨个执行 rsync 命令去同步文件,这样会累死, 直接写个同步脚本去批量同步配置,相当于把命令封装到shell脚本里面,这样不用每次都写一遍命令,使用起来也很方便.

下面脚本就是我可以通过 zjj101 机器向 zjj102和zjj103机器上同步文件夹里面的文件,如果文件夹里面有软连接的话,也会同步软连接对应的目录的文件.

xsync文件的内容:

#!/bin/bash
#校验参数是否合法
if(($#==0))
then
        echo 请输入要分发的文件!
        exit;
fi
# -P 如果是软连接也能获取分发文件的绝对路径
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`

echo 要分发的文件的路径是:$dirpath/$filename

#循环执行rsync分发文件到集群的每条机器
# for循环适当修改一下, 也可以在这里写死你自己的服务名字.
# 我这里的服务器名字是 zjj102和 zjj103
for((i=102;i<=103;i++))
do
        echo ---------------------zjj$i---------------------
        rsync -rvlt $dirpath/$filename  root@zjj$i:$dirpath
done

使用rsync分发脚本

zjj101机器下的 “/root/soft” 路径有 demo文件夹,
而zjj102和zjj103机器下的"/root/soft" 路径没有demo文件夹
下面开始给 zjj101文件下的demo文件夹里面的东西同步到zjj102和zjj103上面.

准备工作

zjj101 机器/root/soft 文件夹下面 新建个 demo文件夹,然后新建一个demoSCP.txt 文件, 里面随便写点东西.

zjj101机器

[root@zjj101 soft]# pwd
/root/soft
[root@zjj101 soft]# ls
data  demo  docker  hadoop-2.7.2  hive-1.2.1  movie_info.txt  myconf  sortby-result  tmp  xsync
[root@zjj101 soft]# cd demo/
[root@zjj101 demo]# ls
demoSCP.txt
[root@zjj101 demo]# cat demoSCP.txt 
sdklasjlkd
[root@zjj101 demo]# 

zjj102机器

[root@zjj102 soft]# pwd
/root/soft
[root@zjj102 soft]# ls
hadoop-2.7.2
[root@zjj102 soft]# 

zjj103机器

[root@zjj103 soft]# pwd
/root/soft
[root@zjj103 soft]# ls
hadoop-2.7.2  myconf
[root@zjj103 soft]# 

开始同步

相对路径

zjj101

[root@zjj101 soft]#  sh xsync demo/
要分发的文件的路径是:/root/soft/demo
---------------------zjj102---------------------
sending incremental file list
demo/
demo/demoSCP.txt

sent 136 bytes  received 39 bytes  350.00 bytes/sec
total size is 11  speedup is 0.06
---------------------zjj103---------------------
sending incremental file list
demo/
demo/demoSCP.txt

sent 136 bytes  received 39 bytes  116.67 bytes/sec
total size is 11  speedup is 0.06
[root@zjj101 soft]# 

zjj102查看结果

[root@zjj102 soft]# ls
demo  hadoop-2.7.2
[root@zjj102 soft]# cd demo/
[root@zjj102 demo]# ls
demoSCP.txt
[root@zjj102 demo]# cat demoSCP.txt 
sdklasjlkd
[root@zjj102 demo]# 

此时发现 已经同步过来demo文件夹的内容了, zjj103就不粘贴shell命令结果, 和zjj102一样的结果,demo也被同步过来了.

绝对路径

zjj101机器上新添加了个demo2.txt
然后使用 rsync脚本同步一下,此时输入的是绝对路径 " sh xsync /root/soft/demo" 这个命令, zjj102和zjj103机器发现已经被同步了demo文件夹里面新增的文件.

[root@zjj101 demo]#  pwd
/root/soft/demo
[root@zjj101 demo]# ls
demo2.txt  demoSCP.txt
[root@zjj101 demo]# cd ../
[root@zjj101 soft]# ls
data  demo  docker  hadoop-2.7.2  hive-1.2.1  movie_info.txt  myconf  sortby-result  tmp  xsync
[root@zjj101 soft]#  sh xsync /root/soft/demo
要分发的文件的路径是:/root/soft/demo
---------------------zjj102---------------------
sending incremental file list
demo/
demo/demo2.txt

sent 158 bytes  received 39 bytes  131.33 bytes/sec
total size is 20  speedup is 0.10
---------------------zjj103---------------------
sending incremental file list
demo/
demo/demo2.txt

sent 158 bytes  received 39 bytes  394.00 bytes/sec
total size is 20  speedup is 0.10
[root@zjj101 soft]# 

zjj102

[root@zjj102 demo]# ls
demo2.txt  demoSCP.txt
[root@zjj102 demo]# 

猜你喜欢

转载自blog.csdn.net/qq_41489540/article/details/109094046