Linux之rsync同步分發指令碼編寫.

張俊傑121發表於2020-10-15

前置知識

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@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]# 

相關文章