批量同步代码:有3台服务器(A,B,C)作负载均衡,因为规模过小目前并未使用专业的自动化运维工具

需求背景是:linux

一个业务,有3台服务器(A,B,C)作负载均衡,因为规模过小目前并未使用专业的自动化运维工具。有新的需求时,开发同事改完代码会把变动上传到其中一台服务器A上。可是其余2台服务器也须要作相同变动。shell

写一个shell脚本,把A服务器上的变动代码同步到B和C上。bash

其中,你须要考虑到不须要同步的目录(假若有tmp、upload、logs、caches)服务器

#!/bin/bash
echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B、C机器上"
read -p "是否要继续(y|n)"
rs() {
     rsync -azP \                     #“\”,表示使行得以继续,命令能够继续正常输入
     --exclude logs \
     --exclude upload \
     --exclude caches \
     --exclude tmp \
www.aaa.com/ $1:/data/wwwroot/www.aaa.com
}
if [ $REPLY == 'y' -o $REPLY == 'Y' ]
then
    echo "即将同步... ..."
    sleep 2
    cd /data/wwwroot/
    rs root@192.168.232.4 #B机器ip,格式:用户名@ip
    rs root@192.168.232.5 #C机器ip,格式:用户名@ip
    echo "同步完成。"
elif [ $REPLY == 'n' -o $REPLY == 'N' ]
then
    exit 1
else
    echo "请输入字母y或者n"
fi

解析:负载均衡

          rs() { }是函数,由{}包围的命令构成了一个代码块,也就是函数体。经过使用花括号{}包围命令,可使各类用途的命令关联在一块儿,构成一个总体。调用函数时,里面的命令会做为一个总体一块儿执行。运维


         调用函数直接使用函数名像普通命令同样使用,直接这里直接使用rs,表示除了logs、upload、caches、tmp目录,将www.aaa.com下的文件同步到$1主机下的/data/wwwroot/www.aaa.com
ide


         rsync命令是一个远程数据同步工具,格式为:rsync [OPTION]... SRC [USER@]host:DEST。  -a选项表示以递归方式传输文件,并保持全部文件的属性。-z选项表示对备份的文件在传输时进行压缩处理,-P选项 等同于 --partial选项,表示保留那些因故没有彻底传输的文件,以加快随后的再次传输。--exclude选项表示指定排除不须要传输的文件,能够是万用字符模式(如*.txt)函数


       而须要特别说明的是,rsync -azP  www.aaa.com/  root@192.168.232.2:/data/wwwroot  本地目录(www.aaa.com)的后面若是不加"/",则会把www.aaa.com这个目录以及目录下的文件一同同步,若是不加“/”,则只会同步目录下的文件,不会同步目录自己。
工具


      函数体里面有集合命令后面用了反斜杠“\”,表示使行得以继续,命令能够继续正常输入,也就是函数体中的每行命令使用“\”,将其链接为一条命令。spa


      这里有个变量$REPLY,为环境变量。在read命令行中,若是不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中。环境变量REPLY中包含最后一次输入的全部数据,能够像使用其余变量同样在shell脚本中使用环境变量REPLY.


  

     if判断的含义是:若是read输入的变量值为"y"或者"Y",则依次输出“正在同步”,延迟2秒,进入/data/wwwroot/,执行函数体,输出“同步完成”,若是read 输入的变量值为"n"或"N",则退出,不然(以上两种状况都不存在),则输出请输入字母y或者n


     sleep 2 表示延迟2秒

相关文章
相关标签/搜索