目录: 

相关概念

编译安装rsync

rsync简单使用示例

rsync + crontab实现文件定时同步,并发送邮件提醒

rsync daemon + inotify实现文件实时同步

 

一、相关概念

1、rsyncremote synchronize,一款开源、快速的、可实现全量及增量本地或远程数据同步的软件,下载地址https://rsync.samba.org/

2、rsync特点:

(1)传输速度快,首次全量传输,后续会对比文件的不同,只传输文件更新部分,实现增量传输;

(2)传输安全性高;

(3)支持匿名传输,方便网站镜像;

(4)支持传输软链接、设备等特殊文件;

(5)支持传输时保留源文件的权限、属主、属组、时间、软硬链接等信息;

(6)支持传输时排除指定的目录或文件;

(7)支持传输时压缩,使用更少的带宽,提高传输效率。

3、rsync工作模式:

(1)单个服务器本地目录之间传输数据(类似cp);

(2)借助SSH通道传输数据(类似scp);

(3)daemon守护进程方式传输数据(需要/etc/rsyncd.conf配置文件)。

4、inotify:一种强大的、异步的文件系统事件监控机制。Linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是提供监控功能的软件。

5、inotify-tools:可在命令行下提供对文件系统事件的监控,包括inotifywaitinotifywatch两个命令行工具,下载地址https://github.com/inotify-tools/inotify-tools/releases

(1)inotifywait:在被监控的目录或文件中等待特定文件系统事件(如openclosedelete等)发生,执行后处于阻塞状态;

(2)inotifywatch:收集被监控文件系统的数据,统计文件系统事件发生的次数。


二、编译安装rsync

1、安装编译环境:# yum -y groupinstall "Development Tools"

2、编译安装rsync

# tar -xf rsync-3.1.3.tar.gz -C /usr/src

# cd /usr/src/rsync-3.1.3

# ./configure --prefix=/usr/local/rsync --enable-profile

# make && make install

备注:CentOS 7.7yum安装的rsync版本为3.1.2

3、配置环境变量:

# vim /etc/profile.d/rsync.sh

export PATH=/usr/local/rsync/bin:$PATH

# . /etc/profile.d/rsync.sh

4、查看rsync版本:# rsync --version

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第1张图片

5、常用选项:

选项

含义

-v

详细模式输出,传输时显示进度等信息

-q

精简模式输出

-c

根据校验和跳过,而不是修改时间和文件大小

-a

归档模式,以递归方式传输文件,并保持文件所有属性,等同于-rlptgoD选项

-r

递归方式传输目录下的所有子目录及文件

-R

使用相对路径名

-b

传输的同时创建备份,如果目标目录已经存在同名文件时,将旧文件重命名为~filename后缀

--backup-dir=DIR

定义备份文件存放目录

--suffix=SUFFIX

定义备份后缀

-u

仅仅进行更新,即跳过所有已经存在于目标目录,且文件时间晚于要备份的文件

-d

不以递归方式传输目录下的所有子目录及文件

-l

保留符号链接(软链接)

-L

如果传输的文件为软链接,则传输软链接指向的源文件

-H

保留硬链接

-p

保留文件权限

-E

保留可执行权限

-X

保留扩展属性

-o

保留文件属主

-g

保留文件属组

-t

保留文件修改时间

-n

试运行,不做任何更改

-W

完整传输文件(不使用delta-xfer算法)

-x

不跨越文件系统边界

-e

定义要使用的远程Shell

--existing

仅更新已经存在于目标目录的文件,而不更新新创建的文件

--ignore-existing

不更新已经存在于目标目录的文件

--delete

删除目标目录有,但源目录没有的文件

--delete-excluded

删除目标目录有,但源目录没有的文件

--ignore-errors

即使有I/O错误也要删除

--force

强制删除不为空的目录

--max-delete=NUM

最多删除NUM个文件

--max-size=SIZE

不传输任何大于SIZE的文件

--min-size=SIZE

不传输任何小于SIZE的文件

--partial

保留部分传输的文件,为加快再次传输

--partial-dir=DIR

DIR中保留部分传输的文件

--timeout=SECONDS

定义I/O超时秒数

--contimeout=SECONDS

定义后台程序连接超时秒数

-I

不跳过具有相同大小和修改时间的文件

--size-only

跳过大小匹配的文件

-T   DIR

DIR中创建临时文件

-z

传输时压缩文件

--compress-level=NUM

定义压缩级别

--exclude=PATTERN

排除模式匹配的文件

--exclude-from=FILE

FILE中读取排除模式

--include=PATTERN

不排除模式匹配的文件

--include-from=FILE

FILE中读取包含模式

--address=ADDRESS

定义IP地址

--port=PORT

定义rsync端口号

--stats

提供文件传输统计信息

--progress

传输时显示进度

-P

等同于--partial --progress

--log-file=FILE

定义日志文件

--log-file-format=FMT

定义日志文件记录格式

--password-file=FILE

定义用户认证文件

--list-only

列出文件而非复制文件

--version

查看版本号

-h

查看帮助信息


三、rsync简单使用示例

1、test1目录下的ab文件同步至test2目录:

# rsync -avz /test1/{a,b} /test2

2、test1目录下的c目录同步至test2目录:

# rsync -avz /test1/c /test2

3、假设test1目录下有abc三个文件,test2目录下有ad两个文件和e一个目录,保证test2目录内容与test1一致:

# rsync -avz --delete /test1/ /test2/

4、假设test1目录下有abcde五个文件,test2目录为空目录,除了bd以外的test1目录下的所有文件都同步至test2目录:

# rsync -avz --exclude={b,d} /test1/ /test2/

5、假设test1目录下有abcde五个文件,test2目录下有xyz三个目录,除了bd以外的test1目录下的所有文件都同步至test2目录,且删除test2目录下的xyz三个目录:

# rsync -avz --delete --exclude={b,d} /test1/ /test2/

6、将本地192.168.0.120服务器test1目录下的所有文件和目录同步至远程192.168.0.121服务器test2目录:

# rsync -avz -e 'ssh -p 22' /test1/ [email protected]:/test2

7、列出远程192.168.0.121服务器test2目录下的内容:

# rsync [email protected]:/test2/

8、将远程192.168.0.121服务器整个test2目录同步至本地192.168.0.120服务器test1目录:

# rsync -avz -e 'ssh -p 22' [email protected]:/test2 /test1

备注:

(1)示例6~示例8中,远程192.168.0.121服务器中需要事先安装rsync,否则会提示“rsync error: remote command not found”;

(2)如果同步的是目录中的所有内容,需要在目录后加/;如果同步的是整个目录,则不需要在目录后加/

 

四、rsync + crontab实现文件定时同步,并发送邮件提醒

1、演示环境:

IP

操作系统

主机名

目录

角色

192.168.0.120

CentOS   7.7 x86_64

web

/usr/share/nginx/html

本地服务器(rsync客户端)

192.168.0.121

CentOS   7.7 x86_64

backup

/data/nginx

远程服务器(rsync服务端)

目标:每隔2小时将web节点/usr/share/nginx/html目录下的所有子目录和文件同步至backup节点/data/nginx目录。

2、准备工作:

(1)两个节点关闭firewalldSELinux

(2)两个节点配置主机名;

(3)两个节点时间同步;

(4)两个节点修改/etc/hosts配置文件:

# vim /etc/hosts

192.168.0.120 web

192.168.0.121 backup

(5)web节点配置免密登录backup节点:

# ssh-keygen -t rsa -b 2048 -P ""

# ls ~/.ssh

# ssh-copy-id root@backup

# ssh root@backup

web节点:# cat ~/.ssh/id_rsa.pub

backup节点:# cat ~/.ssh/authorized_keys

备注:内容一致

(6)web节点安装配置Nginx

# yum -y install epel-release

# yum -y install nginx

# systemctl start nginx

# systemctl status nginx

# ss -tunlp | grep -w :80

# ls /usr/share/nginx/html

(7)web节点安装配置crond

# yum -y install crontabs

# systemctl start crond

# systemctl status crond

# systemctl enable crond

(8)web节点配置邮件服务:

# yum -y install mailx

# cp /etc/mail.rc{,.bak}

# vim /etc/mail.rc,末尾新增如下代码:

set [email protected]

set smtp=smtp.qq.com

set [email protected]

set smtp-auth-password=QQ邮箱授权码

set smtp-auth=login

# echo "Hello World" | mail -s "test" [email protected]

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第2张图片

(9)backup节点创建目录:# mkdir -pv /data/nginx

3、web节点安装配置rsync

(1)安装编译环境:# yum -y groupinstall "Development Tools"

(2)编译安装rsync

# tar -xf rsync-3.1.3.tar.gz -C /usr/src

# cd /usr/src/rsync-3.1.3

# ./configure --prefix=/usr/local/rsync --enable-profile

# make && make install

(3)配置环境变量:

# vim /etc/profile.d/rsync.sh

export PATH=/usr/local/rsync/bin:$PATH

# . /etc/profile.d/rsync.sh

4、web节点编写同步脚本:

# mkdir -pv /scripts

# vim /scripts/rsync_backup.sh

#!/bin/bash

/usr/local/rsync/bin/rsync -azL --delete -e 'ssh -p 22' /usr/share/nginx/html/ [email protected]:/data/nginx/

if [ $? == 0 ]; then

/usr/bin/echo "successfully" | /usr/bin/mail -s "192.168.0.120 nginx backup" [email protected]

else

/usr/bin/echo "failed" | /usr/bin/mail -s "192.168.0.120 nginx backup" [email protected]

fi

# chmod +x /scripts/rsync_backup.sh

5、web节点配置任务计划:

# crontab -e

0 */2 * * * /scripts/rsync_backup.sh &> /dev/null

# crontab -l

6、测试同步:

(1)第一次同步:

web节点:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第3张图片

backup节点:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第4张图片

收取邮件:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第5张图片

(2)创建文件:

web节点创建文件:# echo "error" > error.html

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第6张图片

backup节点查看:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第7张图片

收取邮件:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第8张图片

备注:为了演示效果,将任务计划时间间隔调整为3分钟

(3)删除文件:

web节点删除文件:# rm -rf 404.html 50x.html nginx-logo.png poweredby.png

image.png

backup节点查看:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第9张图片


五、rsync daemon + inotify实现文件实时同步

1、   演示环境:

IP

操作系统

主机名

目录

角色

192.168.0.120

CentOS   7.7 x86_64

web

/usr/share/nginx/html

本地服务器(rsync客户端)

192.168.0.121

CentOS   7.7 x86_64

backup

/data/nginx

远程服务器(rsync服务端)

目标:将web节点/usr/share/nginx/html目录下的所有子目录和文件实时同步至backup节点/data/nginx目录。

2、准备工作:

(1)两个节点关闭firewalldSELinux

(2)两个节点配置主机名;

(3)两个节点时间同步;

(4)两个节点修改/etc/hosts配置文件:

# vim /etc/hosts

192.168.0.120 web

192.168.0.121 backup

(5)web节点配置免密登录backup节点:

# ssh-keygen -t rsa -b 2048 -P ""

# ls ~/.ssh

# ssh-copy-id root@backup

# ssh root@backup

web节点:# cat ~/.ssh/id_rsa.pub

backup节点:# cat ~/.ssh/authorized_keys

备注:内容一致

(6)web节点安装配置Nginx

# yum -y install epel-release

# yum -y install nginx

# systemctl start nginx

# systemctl status nginx

# ss -tunlp | grep -w :80

# ls /usr/share/nginx/html

(7)backup节点创建目录:# mkdir -pv /data/nginx

3、两个节点安装配置rsync

(1)安装编译环境:# yum -y groupinstall "Development Tools"

(2)编译安装rsync

# tar -xf rsync-3.1.3.tar.gz -C /usr/src

# cd /usr/src/rsync-3.1.3

# ./configure --prefix=/usr/local/rsync --enable-profile

# make && make install

(3)配置环境变量:

# vim /etc/profile.d/rsync.sh

export PATH=/usr/local/rsync/bin:$PATH

# . /etc/profile.d/rsync.sh

4、backup节点修改rsyncd.conf配置文件:

# mv /etc/rsyncd.conf{,.bak}

# vim /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid

port = 873

address = 192.168.0.121

[nginx]

comment = nginx html docs

path = /data/nginx

use chroot = no

max connections = 5

log file = /var/log/rsyncd.log

lock file = /var/run/rsyncd.lock

read only = no

list = no

uid = root

gid = root

auth users = ryuser

secrets file = /etc/.rsync.passwd

hosts allow = 192.168.0.120

ignore errors

timeout = 600

dont compress = *.zip *.rar *.7z *.tar *.gz *.xz *.bz2 *.tar.gz *.tar.xz *.tar.bz2 *.tgz *.z

# chmod 600 /etc/rsyncd.conf

备注:常用参数介绍(# man rsyncd.conf

全局参数

含义

pid   file = /var/run/rsyncd.pid

保存进程号的pid文件存放位置

port =   873

默认监听端口号

address   = 192.168.0.121

默认监听地址

模块参数

含义

[nginx]

模块名称,可以定义多个

comment   = nginx html docs

定义当客户端获取可用模块列表时,显示在模块名称旁的描述字符串

path =   /data/nginx

传输数据存放目录

use   chroot = no

禁止禁锢在path参数定义的目录中

max connections   = 5

定义允许的客户端最大并发连接数,当达到最大值时,连接的任何客户端都将收到一条消息,告诉它们稍后再试,默认值为0,表示没有限制

log   file = /var/log/rsyncd.log

日志文件存放位置,启动rsync后会自动创建此文件,无需手动创建

lock   file = /var/run/rsyncd.lock

定义用于支持“max   connections最大并发连接数”参数的锁文件存放位置

read   only = no

定义客户端是否能够上传文件,默认情况下为只读

list =   no

定义当客户端要求列出可用模块时是否列出该模块,如果该值为no,则当“hosts allow”或“hosts   deny”拒绝客户端访问该模块时,守护进程将假装该模块不存在,默认情况下,模块是可列出的

uid =   root

定义当后台程序以root用户身份运行时,与该模块之间的文件传输应发生的用户名或用户ID,超级用户运行时的默认设置是切换到系统的nobody用户,非超级用户的默认设置是不更改用户

gid   = root

定义访问模块时使用的一个或多个组名/标识,第一个组将是默认组,任何额外的组都将设置为附加组,超级用户运行时的默认设置是切换到系统的nobody(或nogroup)组,而不使用其它附加组,非超级用户的默认设置是不更改任何组属性

exclude

定义采用以空格分隔的守护程序排除模式列表,模式可以用“-”或“+”限定,以显式定义exclude/include,只有一个“exclude”参数可以应用于给定模块

include

使用“include”覆盖“exclude”参数的效果,只有一个“include”参数可以应用于给定模块

exclude   from

定义守护进程排除模式的文件,每行一个,只有一个“exclude   from”参数可以应用于给定模块

include   from

定义守护进程包含模式的文件,类似于“exclude   from”,只有一个“include   from”参数可以应用于给定模块

auth   users = ryuser

定义以逗号或空格分隔的授权规则列表,在最简单的形式中,列出允许连接到该模块的用户名,用户名不需要存在于本地系统中,如果设置了“auth   users”,则将要求客户端提供连接到模块的用户名和密码,纯文本用户名和密码存储在由“secrets   file”参数定义的文件中,默认情况下,所有用户都可以在没有密码的情况下进行连接(称为“匿名rsync”)

secrets   file = /etc/.rsync.passwd

定义用于验证模块的用户名密码,连同“auth   users”参数一起使用

hosts   allow = 192.168.0.120

允许数据同步的客户端IP,可以设置多个,用英文状态逗号分隔

hosts   deny = 192.168.0.0/24

禁止数据同步的客户端IP,可以设置多个,用英文状态逗号分隔

ignore   errors

定义rsyncd在决定是否运行传输的删除阶段时忽略守护进程上的I/O错误,通常,如果发生任何I/O错误,rsync会跳过--delete步骤,以防止由于临时资源不足或其它I/O错误而导致灾难性删除,在某些情况下,测试会适得其反,因此可以使用该参数关闭此行为

timeout   = 600

客户端连接服务端的超时时长,单位秒,默认值为0,表示不会超时

dont   compress = *.zip *.rar *.7z *.tar *.gz *.xz *.bz2 *.tar.gz *.tar.xz *.tar.bz2   *.tgz *.z

数据同步时不会执行压缩的文件类型

5、backup节点创建用户认证文件:

# echo "ryuser:root@1234" > /etc/.rsync.passwd

# chmod 600 /etc/.rsync.passwd

备注:服务端文件格式,用户名:密码,可以设置多个,每行一个

6、backup节点配置rsync

# rsync --daemon

# ps -ef | grep rsync

# ss -tunlp | grep -w 873

# echo "/usr/local/rsync/bin/rsync --daemon" >> /etc/rc.d/rc.local

# chmod +x /etc/rc.d/rc.local

备注:

(1)使用命令# rsync --daemon --help查看rsync daemon模式下的帮助信息;

(2)结束rsync进程可使用命令# pkill rsync # yum -y install psmisc # killall rsync

7、web节点创建用户认证文件:

# echo "root@1234" > /etc/.rsync.passwd

# chmod 600 /etc/.rsync.passwd

备注:客户端文件中只需包含密码,且密码要和backup节点(服务端)一致

8、web节点查看内核是否支持inotify

# ls /proc/sys/fs/inotify

# cat /proc/sys/fs/inotify/max_queued_events

# cat /proc/sys/fs/inotify/max_user_instances

# cat /proc/sys/fs/inotify/max_user_watches

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第10张图片

备注:

(1)如果显示max_queued_eventsmax_user_instancesmax_user_watches,说明内核支持inotify

(2)max_queued_events:定义inotify实例事件队列的最大长度,如果定义的值太小,会出现“Event Queue Overflow”错误;

(3)max_user_instances:定义每个用户最多可以创建的inotify实例数量;

(4)max_user_watches:定义每个inotify实例最多可以监控的目录数量。

9、web节点调整inotify内核参数大小:

# vim /etc/sysctl.conf,末尾新增如下代码:

fs.inotify.max_queued_events = 50000000

fs.inotify.max_user_instances = 65535

fs.inotify.max_user_watches = 50000000

# sysctl -p

image.png

image.png

10、web节点安装配置inotify-tools

(1)编译安装inotify-tools

# tar -xf inotify-tools-3.20.2.2.tar.gz -C /usr/src

# cd /usr/src/inotify-tools-3.20.2.2

# ./configure --prefix=/usr/local/inotify-tools

# make && make install

备注:CentOS 7.7中先安装epel源,然后通过yum安装的inotify-tools版本为3.14

(2)配置环境变量:

# vim /etc/profile.d/inotify-tools.sh

export PATH=/usr/local/inotify-tools/bin:$PATH

# . /etc/profile.d/inotify-tools.sh

(3)inotifywait命令常用选项:

选项

含义

-h

查看帮助信息

@

排除无需监控的文件

--exclude  

排除与扩展正则表达式匹配的文件,区分大小写

--excludei  

排除与扩展正则表达式匹配的文件,不区分大小写

--include  

不排除与扩展正则表达式匹配的文件,区分大小写

--includei  

不排除与扩展正则表达式匹配的文件,不区分大小写

-m

始终保持事件监听状态直到超时,即捕获一个事件后不退出,默认捕获一个事件后立即退出

-d

-m选项含义基本一致,后台运行

-r

递归监控目录,包括子目录和文件

--fromfile  

从标准输入或中读取要监控的文件

--outfile  

打印事件至,而非标准输出     

-s

发送错误至syslog,而非标准错误

-q

仅打印监控事件信息

-qq

不打印任何信息

--format  

定义事件输出格式:

Ø %w:事件发生时,被监控的目录名

Ø %f:事件发生时,被监控目录中触发事件的文件名

Ø %e:替换为发生的事件,用英文状态逗号分隔

Ø %T:使用由--timefmt选项定义的时间输出格式,此格式是通过strftime函数进行匹配时间格式信息的

--timefmt  

定义时间输出格式:

Ø %d:十进制方式显示每月的第几天(范围01~31

Ø %D:显示“月//年(%m/%d/%y)”

Ø %F:显示“年--日(%Y-%m-%d)”

Ø %H:十进制方式显示小时,24小时制(范围00~23

Ø %m:十进制方式显示月份(范围01~12

Ø %M:十进制方式显示分钟(范围00~59

Ø %S:十进制方式显示秒钟(范围00~59

Ø %T:显示“时::秒(%H:%M:%S)”

Ø %y:十进制方式显示年份,不包括世纪信息(范围00~99

Ø %Y:十进制方式显示年份,包括世纪信息

-t  

当监听单个事件时,在等待事件秒后超时,如果为负数,inotifywait将永不超时

-e  

定义监听的事件,如省略,则监听所有事件

(4)inotifywait命令-e选项可定义的事件类型:

事件类型

含义

access

文件或目录内容被读取

modify

文件或目录内容被修改

attrib

文件或目录属性被改变

close_write

读写模式下,文件或目录被关闭

close_nowrite

只读模式下,文件或目录被关闭

close

无论读/写模式如何,文件或目录被关闭

open

文件或目录被打开

moved_to

文件或目录被移动至监控目录

moved_from

文件或目录从监控目录移动至当前目录

move

文件或目录移动至监控目录或从监控目录移动至当前目录

move_self

被监控的文件或目录被移动

create

在监控目录中创建文件或目录

delete

在监控目录中删除文件或目录

delete_self

文件或目录被删除

umount

包含文件或目录的文件系统被卸载

11、web节点测试inotifywait事件监控:

(1)创建文件:

第一个终端:# inotifywait -mrq --timefmt '%y/%m/%d %H:%M' --format '%T %w%f' -e create /tmp

image.png

第二个终端:# touch /tmp/a.txt

第一个终端:

image.png

Ctrl + c

(2)删除文件:

第一个终端:# inotifywait -mrq --timefmt '%F %T' --format '%T %w%f %e' -e delete /tmp

image.png

第二个终端:# rm -f /tmp/a.txt

第一个终端:

image.png

Ctrl + c

备注:因为inotifywait监控时,终端处于阻塞状态,所以要开启两个终端进行测试

12、web节点测试同步数据至backup节点:

(1)web节点tmp目录下的所有文件和目录同步至backup节点/data/nginx目录:

# rsync -avz --password-file=/etc/.rsync.passwd /tmp/ [email protected]::nginx

(2)web节点整个tmp目录同步至backup节点/data/nginx目录:

# rsync -avz --password-file=/etc/.rsync.passwd /tmp rsync://[email protected]/nginx

备注:无需在命令中写明/data/nginx目录,已在[nginx]模块中定义了path参数,且“用户名@地址::模块名”和“rsync://用户名@地址/模块名”两种表示方式均可

13、web节点编写同步脚本:

# mkdir -pv /scripts

# cd /scripts

# vim rsync_backup.sh

#!/bin/bash

SRCDIR=/usr/share/nginx/html

DSTIP="192.168.0.121"

MODULENAME=nginx

USERNAME=ryuser

PWDFILE=/etc/.rsync.passwd

EXCDIR=/scripts/rsync_exclude.txt

/usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%F %T' --format '%T %w%f %e' -e attrib,create,delete,modify,move $SRCDIR | while true

do

for ip in $DSTIP

do

/usr/local/rsync/bin/rsync -azL --delete --exclude-from=$EXCDIR --password-file=$PWDFILE $SRCDIR/ $USERNAME@$ip::$MODULENAME

done

done

# chmod +x rsync_backup.sh

# touch rsync_exclude.txt

# nohup ./rsync_backup.sh &

# jobs

image.png

备注:

(1)DSTIP中如果包含多个目标IP,用空格分隔;

(2)EXCDIR表示不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径,比如不需要同步/usr/share/nginx/html目录下的a目录,还有b目录下的c目录,/scripts/rsync_exclude.txt文件可写成:

a/

b/c/

(3)此处/scripts/rsync_exclude.txt文件内容为空;

(4)jobs命令查看系统中正在执行的任务列表和任务状态,终止备份脚本可使用命令# pkill rsync

14、测试同步:

(1)创建文件:

web节点创建文件,并修改文件属性:

# cd /usr/share/nginx/html

# echo "error" > error.html

# chmod 777 error.html

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第11张图片

backup节点查看:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第12张图片

(2)删除文件:

web节点删除文件:

# rm -rf 404.html 50x.html nginx-logo.png poweredby.png

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第13张图片

backup节点查看:

CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步_第14张图片

15、web节点配置同步脚本开机启动:

# echo "nohup /scripts/rsync_backup.sh &" >> /etc/rc.d/rc.local

# chmod +x /etc/rc.d/rc.local