利用Inotify和Rsync将Web工程文件自动同步到多台应

背景:需要搭建一套跟线上一模一样的环境,用来预发布,这是其中的web分发的一个小模块的实现过程。

1 工具以及环境简介

1.1,Inotify工具

Inotify,它是一个内核用于通知用户空间程序文件系统变化的机制。众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用通报关于热插拔设备一些事件发生的机制,桌面系统能够利用它对设备进行有效的管理,udev 动态地维护 /dev 下的设备文件,inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知,该机制是著名的桌面搜索引擎项目 beagle 引入的,并在 Gamin 等项目中被应用。

1.2,rsync工具

它是类unix系统下的数据镜像备份工具,实现远程同步remote sync,它的特性如下:

(1),可以镜像保存整个目录树和文件系统。

(2),可以很容易做到保持原来文件的权限、时间、软硬链接等等。

(3),无须特殊权限即可安装。

(4),快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

(5),安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

(6),支持匿名传输,以方便进行网站镜象。

1.3,简单环境介绍:

(1),服务器端(代码发布服务器):192.168.0.51

(2),客户端(Web服务器):192.168.0.50,192.168.0.53

(3),Web目录:/usr/local/nginx/web/

(4),基本原理:由192.168.0.51上inotify服务监测文件目录/usr/local/nginx/web是否有更新,如果有更新(修改,删除,新建)inotify就会通过rsync命令将更新的文件推向二台web服务器(192.168.0.50和192.168.0.53)。

(5),架构图如下: 

利用Inotify和Rsync将Web工程文件自动同步到多台应

利用inotifywait监控主机文件和目录

利用inotify+rsync实现Linux文件批量更新

inotify-tools+rsync实时同步文件安装和配置

rsync同步完整配置

2.1,查看线上inotify版本

通过rsync -h找到查看帮助,找到 --version参数。

[root@localhost bin]# inotifywait --help

inotifywait 3.14

Wait for a particular event on a file or set of files.

Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]

Options:

……

看到版本号码是3.14

2.2,下载inotify版本

下载地址:

------------------------------------------分割线------------------------------------------

免费下载地址在

用户名与密码都是

具体下载目录在 /2014年资料/6月/30日/利用Inotify和Rsync将Web工程文件自动同步到多台应用服务器

下载方法见

------------------------------------------分割线------------------------------------------ 

2.3,开始编译安装

[root@localhost root] tar -xvf inotify-tools-3.14.tar.gz

通过./configure --help查看编译参数,这里选取--prefix参数,开始编译:

[root@localhost inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14

...

config.status: creating Makefile

config.status: creating src/Makefile

config.status: creating man/Makefile

config.status: creating libinotifytools/Makefile

config.status: creating libinotifytools/src/Makefile

config.status: creating libinotifytools/src/inotifytools/Makefile

config.status: creating config.h

config.status: creating libinotifytools/src/inotifytools/inotify.h

config.status: executing depfiles commands

config.status: executing libtool commands

[root@localhost inotify-tools-3.14]# time make

...

fytools.so -Wl,-rpath -Wl,/usr/local/inotify-tools-3.14/lib

make[2]: Leaving directory `/root/inotify-tools-3.14/src'

Making all in man

make[2]: Entering directory `/root/inotify-tools-3.14/man'

make[3]: Entering directory `/root/inotify-tools-3.14'

make[3]: Leaving directory `/root/inotify-tools-3.14'

make[2]: Nothing to be done for `all'.

make[2]: Leaving directory `/root/inotify-tools-3.14/man'

make[2]: Entering directory `/root/inotify-tools-3.14'

cd . && /bin/sh ./config.status config.h

config.status: creating config.h

config.status: config.h is unchanged

make[2]: Leaving directory `/root/inotify-tools-3.14'

make[1]: Leaving directory `/root/inotify-tools-3.14'

real  0m2.889s

user 0m1.768s

sys  0m0.589s

[root@localhost inotify-tools-3.14]# time make install

...

make[2]: Nothing to be done for `install-exec-am'.

make[2]: Nothing to be done for `install-data-am'.

make[2]: Leaving directory `/root/inotify-tools-3.14'

make[1]: Leaving directory `/root/inotify-tools-3.14'

real  0m0.854s

user 0m0.454s

sys  0m0.254s

2.4,做成软连接到/usr/lib下

ln -sv /usr/local/inotify-tools-3.14/lib/libinotify* /usr/lib/

ln -s /usr/local/inotify-tools-3.14/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

设置环境变量:

[root@localhost ~]# echo "export PATH=$PATH:/usr/local/inotify-tools-3.14/bin">>/etc/profile

[root@localhost ~]# source /etc/profile

[root@localhost ~]# inotifywait --help

inotifywait 3.14

Wait for a particular event on a file or set of files.

Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]

...

现在可以直接用inotify命令而不用附带加上全路径

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/807af36edafe95378c133f44cc814c07.html