您的位置:首页 > 其它

两台服务器间使用rsync和inotify-tools实现文件同步

2017-09-16 12:07 489 查看
在开发过程中,PC端和微信端的后台程序位于不同服务器上,而甲方又要求通过PC端来修改微信端的文件,为了方便起见,决定使用现在PC端服务器完成文件的修改,再将此文件同步到微信端服务器。试了网上的很多rsync的配置,都无法工作。发现使用ssh连接可以在不需要配置rsync的情况下使用rsync完成文件的同步,所以本文主要介绍在ssh连接下如何使用rsync和inotify-tools实现文件同步。

rsync介绍

rsync全称remote sync,是一种更高效、可以本地或远程同步的命令,之所以高效是因为rsync会对需要同步的源和目的进度行对比,只同步有改变的部分,所以比scp命令更高效,但是rsync本身是一种非加密的传输,可以借助-e选项来设置具备加密功能的承载工具进行加密传输。

rsync有四种工作模式分为:

1、shell模式,也称作本地模式

2、远程shell模式,此时可以利用ssh协议承载其数据传输过程

3、列表模式,其工作方式与ls相似,仅列出源的内容:-nv

4、服务器模式,此时,rsync可以工作在守护进程,能够接收客户端的数据请求;在使用时,可以在客户端使用rsync命令把文件发送到守护进程,也可以像服务器请求获取文件

rsync命令选项

-n:测试,在不确定命令是否能按照意愿执行时,务必要实现测试

-v:详细输出模式,–verbose

-q:–quiet,静默模式

-c:–checksum,开启校验功能,强行对文件传输进行校验

-r:–recursive,递归复制

-a: –archives.归档,保留文件的原有属性。

本次主要使用命令:将/root/common/welcome.txt文件同步到目标服务器的/root/common/welcome.txt

rsync -a /root/common/welcome.txt 用户名@目标服务器地址:/root/common/welcome.txt


rsync一般是系统自带的。无需自己安装。

inotify-tools介绍

Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。。

inotify-tools是一个C库和一组命令行的工作提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令。

inotifywait命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。

inotifywatch命令用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

本文只是用了inotifywait命令。

安装inotify-tools

sudo apt-get install inotify-tools


inotifywait命令参数

参数描述
-m是要持续监视变化。
-r使用递归形式监视目录。
-q减少冗余信息,只打印出需要的信息。
-e指定要监视的事件列表。
–timefmt是指定时间的输出格式。
–format指定文件变化的详细信息。

可监听的事件

事件描述
access访问,读取文件。
modify修改,文件内容被修改。
attrib属性,文件元数据被修改。
move移动,对文件进行移动操作。
create创建,生成新文件
open打开,对文件进行打开操作。
close关闭,对文件进行关闭操作。
delete删除,文件被删除。

具体操作

ssh连接

生成密钥对(每台服务器上都要执行)

ssh-keygen -t rsa


此条命令执行完之后,会在/home/.ssh/文件夹下生成两个文件 id_rsa和id_rsa.pub,为了避免重名带来的文件覆盖问题,将id_rsa.pub文件重命名为在network中定义的主机名(也可以任意).

在一台服务器上使用scp命令将另一台服务器的公钥拷贝到/home/.ssh文件下

scp /home/.ssh/ 目标服务器IP:/home/.ssh/master


将2个公钥文件放入authorized_keys文件中

cat 公钥文件1>> authorized_keys;
cat 公钥文件2 >> authorized_keys;


将authorized_keys文件拷贝到另一台服务器,命令参考前面

使用rsync和inotify-tools实现文件同步

具体代码如下(backup.sh):

#!/bin/bash
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y/%H:%M' --format '%e %f' -e modify /root/common/ | while read file
do
if [[ $file = 'MODIFY welcome.txt' ]];then
rsync -a /root/common/welcome.txt root@目标服务器IP:/root/common/welcome.txt
fi
done;


后台运行backup.sh

bash ./backup.sh &
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: