看啥

导航

Rsync服务

⼀、备份

1.什么是备份?

备份就是把重要的数据或⽂件再次复制⼀份保存起来(给源⽂件增加⼀个副本)

2.为什么要备份?

  1. 数据很重要!!!
  2. 出现故障之后,需要恢复数据(软件服务出现问题⼏率很⼩,80%都是⼈为故障)
  3. 保证数据不丢失
  4. 便于快速恢复

3.能不能不做备份?

  • 对于不重要的数据,我们可以不做备份
  • 对于不必要的数据可以选择定时清理

4.备份常⽤⼯具?

  • 本地复制 cp
  • 远程传输 scp rsync

⼆、rsync服务概念

1.rsync简介

rsync英⽂称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是⼜优于scp命令的功能,scp每次都是全量拷⻉,⽽rsync可以增量拷⻉。当然,rsync还可以在本地主机的不同分区或⽬录之间全量及曾量的复制数据,这⼜类似cp命令。但是同样也优于cp命令,cp每次都是全量拷⻉,⽽rsync可以增量拷⻉。

在同步数据的时候,默认情况下,rsync通过其独特的“quick check”算法,它仅同步⼤⼩或者最后修改时间发⽣变化的⽂件或⽬录,当然也可根据权限、属主等属性的变化同步,但是需要制定相应的参数,甚⾄可以实现只同步⼀个⽂件⾥有变化的内容部分,所以,可是实现快速的同步备份数据。

1、rsync简称远程同步,可以实现不同主机之间的同步. 同时⽀持增量和全量的备份.
2、不通主机:windows --> linux linux --> linux mac --> linux mac --> windows
3、rsync监听的端⼝:873
4、rsync运⾏模式:C/S模式 client/server

2.rsync特性

⽀持拷⻉特殊⽂件,如连接⽂件、设备等。

  • 可以有排除指定⽂件或⽬录同步的功能,相当于打包命令tar的排除功能。

  • 可以做到保持原⽂件或⽬录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。

  • 可以实现增量同步,既只同步发⽣变化的数据,因此数据传输效率很⾼(tar-N)。

  • 可以使⽤rcp、rsh、ssh等⽅式来配合传输⽂件(rsync本身不对数据加密)。

  • 可以通过socket(进程⽅式)传输⽂件和数据(服务端和客户端)*****。

  • ⽀持匿名的活认证(⽆需系统⽤户)的进程模式传输,可以实现⽅便安全的进⾏数据备份和镜像。

3.⽣产场景备份⽅案

1.借助cron+rsync把所有客户服务器数据同步到备份服务器。
2.针对公司重要数据备份混乱状况和领导提出备份全⽹数据的解决⽅案。
3.通过本地打包备份,然后rsync结合inotify应⽤把全⽹数统⼀备份到⼀个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。
4.定期将IDC机房的数据 备份公司的内部服务器,防⽌机房地震及⽕灾问题导致数据丢失。
5.实时同步,解决存储服务器等的单点问题。

4.rsync如何实现的备份 * (备份⽅式)

1)全备:将数据完全的备份下来
image

2)增备:全备之后,把发⽣变化数据再备份⼀次
image

三、Rsync应⽤场景 *

1.rsync的传输⽅式: pull 拉 push 推

推:
客户端将需要的数据上传到服务端
拉:
客户端讲需要的数据下载下来
image
image

2.传输存在的问题:

推:
如果推送的客户端机器过多,容易造成推送数据缓慢
拉:
如果客户端过多,下载数据会对服务端造成压⼒过⼤

3.rsync多server端

例:现在有20台机器,怎么有效快速的缓解推送和拉取时的速度和压⼒问题s

image

4.异地备份场景

image

四、Rsync传输模式 *

1.传输模式

  • 本地⽅式

  • 远程⽅式

  • 守护进程⽅式

2.本地⽅式 (类似于cp,不⽀持推送和拉取,只是单纯复制)

本地传输语法

命令 参数、选项 源⽂件 ⽬标位置

Local: rsync [OPTION...] SRC... [DEST]

语法示例
root@web01 ~]# rsync -avz 1.txt /mnt/
语法拆分

rsync #备份命令

-avz #参数、选项

./1.txt #源⽂件

/mnt/ #⽬标位置

类似于cp,但是cp是全量复制,每次都提示覆盖,rsync是增量,只要⽂件没有变化就不会再传输,如果有任意改变则传输

3.远程传输⽅式 (类似于scp)

pull拉取数据命令语法

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

pull拉取数据命令语法实例

web02到web01拉取⽂件

[root@web02 ~]# rsync -avz root@172.16.1.7:/root/1.txt ./

pull拉取数据命令语法拆分

rsync #命令

-avz #参数

root #远端服务器⽤户

@ #分隔符

172.16.1.7: #远端服务器主机IP

/root/1.txt #源地址⽂件

./ #⽬标位置

注意:

[root@web02 ~]# rsync -avz root@172.16.1.7:/var/log/ ./    #拉取远程⽬录下的⽂
件

[root@web02 ~]# rsync -avz root@172.16.1.7:/var/log ./     #拉取远程⽬录下的⽂
件及⽬录

push推送数据命令语法

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

push推送数据命令语法示例

web02推送⽂件⾄web01

[root@web02 ~]# rsync -avz ./log/ root@172.16.1.7:/mnt/    #推送⽬录下的⽂件到
远端位置

[root@web02 ~]# rsync -avz ./log root@172.16.1.7:/mnt/     #推送⽬录及⽬录下的
⽂件到远端

push推送数据命令语法拆分

rsync #命令

-avz #参数

./log #本地⽂件或⽬录

root #远端服务器⽤户
172.16.1.7 #远端主机ip

/mnt #远端服务器位置

注意:

当不写⽤户推送或拉取时,默认使⽤当前⽤户连接远端主机同样的⽤户
[root@web02 ~]# rsync -avz ./log 172.16.1.7:/mnt/
普通⽤户也可以推送,只能推送⾄普通⽤户有权限的⽬录下
[root@web02 ~]# rsync -avz ./log qiudao@172.16.1.7:/home/qiudao

3.守护进程传输模式

1)为什么是⽤守护进程模式

1.rsync传输时,使⽤系统⽤户和系统密码(极其不安全)

2.使⽤普通⽤户的时候,会出现权限不⾜的情况

2)守护进程传输模式语法

pull拉取数据命令语法

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
pull拉取数据命令示例

客户端web01拉取bakcup服务器的数据

oot@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./

rsync #命令

-avz #参数

sync_backup #虚拟⽤户

@ #分隔符

72.16.1.41 #远端主机

::backup #模块名

./ #当前位置

意:
取服务端模块名对应的⽬录下的⽂件,拉取的⽂件可以使任意属主属组

push推送数据命令语法

ush: rsync [OPTION...] SRC... [USER@]HOST::DEST

客户端web01推送数据⾄bakcup服务器

[root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup

sync #命令

avz #参数

ackup/ #本地⽂件

sync_backup #虚拟⽤户

@ #分隔符

72.16.1.41 #远端主机

::backup #模块名

注意:

送时,远端模块对应的⽬录权限⼀定是rsyncd服务配置的⽤户

4.守护进程模式实践

1)环境准备

主机⻆⾊ 外⽹ip 内⽹ip 主机名
Rsync服务端 10.0.0.41 172.16.1.41 backup
Rsync客户端 10.0.0.7 172.16.1.7 web01

2)安装rsync(客户端和服务端都要操作)

[root@backup ~]# yum install -y rsync

[root@web01 ~]# yum install -y rsync

3)配置rsync(服务端) *

1  [root@backup ~]# vim /etc/rsyncd.conf

2  #运⾏进程的⽤户

3  uid = rsync

4  #运⾏进程的⽤户组

5  gid = rsync

6  #服务的监听端⼝
7  port = 873

8  #⽆需让rsync以root身份运⾏,保证⽂件属性的安全机制

9  fake super = yes

10  #操作那个⽬录就不允许跳出该⽬录

11  use chroot = no

12  #最⼤连接数

13  max connections = 200

14  #超时时间

15  timeout = 600

16  #忽略错误信息

17  ignore errors

18  #只读,配置成false,⽂件可读写

19  read only = false

20  #查看模块信息

21  list = false

22  #定义虚拟⽤户(rsync传输时使⽤的⽤户)

23  auth users = rsync_backup

24  #定义虚拟⽤户的密码⽂件

25  secrets file = /etc/rsync.passwd

26  #⽇志⽂件

27  log file = /var/log/rsyncd.log

28  #####################################

29  #定义模块的名字


30  [backup]

31  #注释,备注

32  comment = welcome to xxxx backup!

33  #定义真实⽂件⽬录

34  path = /backup

4)创建系统⽤户(服务端)

[root@backup ~]# useradd rsync -s /sbin/nologin -M

5)创建虚拟⽤户的密码⽂件并授权(服务端)

1  [root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd

2  [root@backup ~]# chmod 600 /etc/rsync.passwd

6)创建⽂件⽬录(服务端)

1  [root@backup ~]# mkdir /backup

2  [root@backup ~]# chown -R rsync.rsync /backup/

7)启动服务(服务端)

1  [root@backup ~]# systemctl start rsyncd

2  [root@backup ~]# netstat -lntp

3  Active Internet connections (only servers)

4  Proto Recv-Q Send-Q Local Address           Foreign Address         State
PID/Program name

5  tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN

22815/rsync

6  [root@backup ~]#

8)客户端验证

1  #⽅式⼀:输⼊密码的⽅式

2  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./

3  [root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup
4


5  #⽅式⼆:指定密码⽂件的⽅式

6  #客户端添加密码⽂件

7  [root@web01 ~]# echo "123456" > /etc/rsync.passwd

8  [root@web01 ~]# chmod 600 /etc/rsync.passwd
9

10  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./ --password-
file=/etc/rsync.passwd

11  [root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup --
password-file=/etc/rsync.passwd

12

13  #⽅式三:配置环境变量的⽅式

14  [root@web01 ~]# export RSYNC_PASSWORD=123456
15

16  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./

17  [root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup

9)rsync常⻅报错

1  #1.报错内容:

2  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./backup

3  @ERROR: Unknown module 'backup'

4  rsync error: error starting client-server protocol (code 5) at main.c(1648)
[Receiver=3.1.2]

5  #原因:模块名字配置错误

6

7  #2.报错内容:

8  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./backup

9  @ERROR: auth failed on module backup

10  rsync error: error starting client-server protocol (code 5) at main.c(1648)
[Receiver=3.1.2]

11  #原因:

12  1.服务端密码⽂件不存在(名字写错了/没有创建/配置⽂件错了)

13  2.密码⽂件权限不是600

14  3.服务端密码⽂件⽤户名或密码错误

15  4.客户端密码输⼊错误或密码⽂件内容与服务端不⼀致

16

17  #3.报错内容

18  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./backup

19  rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host
(113)

20  rsync error: error in socket IO (code 10) at clientserver.c(125)
[Receiver=3.1.2]

21  #原因:服务端防⽕墙开启

22

23  #4.报错内容:

24  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::/backup ./backup

25  ERROR: The remote path must start with a module name not a /


26  rsync error: error starting client-server protocol (code 5) at main.c(1648)
[Receiver=3.1.2]

27  #原因:“::”守护进程模式双冒号后⾯为模块名,不能使⽤⽬录

28

29  #5.报错内容:

30  [root@web01 ~]# rsync -avz ./backup rsync_backup@172.16.1.41::backup

31  sending incremental file list

32  rsync: failed to write xattr user.rsync.%stat for "backup" (in backup):
Permission denied (13)

33  rsync: failed to write xattr user.rsync.%stat for "backup/file1" (in
backup): Permission denied (13)

34  backup/
35

36  sent 215 bytes  received 1,099 bytes  2,628.00 bytes/sec

37  total size is 0  speedup is 0.00

38  rsync error: some files/attrs were not transferred (see previous errors)
(code 23) at main.c(1178) [sender=3.1.2]

39  [root@web01 ~]#

40  #原因:服务端推送⽂件的⽬录权限不⾜
41

42  #6.报错内容:

43  [root@web01 ~]# rsync -avz ./backup rsync_backup@172.16.1.41::backup

44  rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused
(111)

45  rsync error: error in socket IO (code 10) at clientserver.c(125)
[sender=3.1.2]

46  #原因:服务端rsyncd服务没有启动

47

48  #7.报错内容:

49  [root@web01 ~]# rsync -avz ./backup rsync_backup@172.16.1.41::backup

50  @ERROR: chdir failed

51  rsync error: error starting client-server protocol (code 5) at main.c(1648)
[sender=3.1.2]

52  #原因:服务端模块对应的⽬录不存在

53

54  #8.报错内容:

55  [root@nfs ~]# rsync -avz /data/ rsync_backup@172.16.1.41::data

56  Password:

57  sending incremental file list

58  rsync: failed to read xattr user.rsync.%stat for "." (in data): Permission
denied (13)

59  rsync: failed to read xattr user.rsync.%stat for "." (in data): Permission
denied (13)

60  rsync: failed to read xattr user.rsync.%stat for "." (in data): Permission
denied (13)

61  rsync: recv_generator: failed to stat "11_class.xlsx" (in data): Permission
denied (13)

62  rsync: failed to read xattr user.rsync.%stat for "." (in data): Permission
denied (13)


63

64  sent 81 bytes  received 476 bytes  222.80 bytes/sec

65  total size is 12,437  speedup is 22.33

66  rsync error: some files/attrs were not transferred (see previous errors)
(code 23) at main.c(1178) [sender=3.1.2]

67  #原因:selinux没有关闭

5.rsync命令选项/参数

1  -a           #归档模式传输, 等于-tropgDl    -t -r -o -p -g -D -l

2  -v           #详细模式输出, 打印速率, ⽂件数量等

3  -z           #传输时进⾏压缩以提⾼效率

4  -r           #递归传输⽬录及⼦⽬录,即⽬录下得所有⽬录都同样传输。

5  -t           #保持⽂件时间信息

6  -o           #保持⽂件属主信息

7  -p           #保持⽂件权限

8  -g           #保持⽂件属组信息

9  -l           #保留软连接

10  -P           #显示同步的过程及传输时的进度等信息

11  -D           #保持设备⽂件信息

12  -L           #保留软连接指向的⽬标⽂件

13  -e           #使⽤的信道协议,指定替代rsh的shell程序

14  --exclude=PATTERN   #指定排除不需要传输的⽂件模式

15  --exclude-from=file #⽂件名所在的⽬录⽂件

16  --bwlimit=100       #限速传输

17  --partial           #断点续传

18  --delete            #让⽬标⽬录和源⽬录数据保持⼀致

19  --password-file=xxx #使⽤密码⽂件

1)排除参数 --exclude --exclude-from

1  #推送当前⽬录下除了dir10以外的所有⽂件

2  [root@web01 ~]# rsync -avz ./* rsync_backup@172.16.1.41::backup --
exclude=dir10

3

4  #排除⽂件⾥指定的⽂件

5  [root@web01 ~]# rsync -avz ./* rsync_backup@172.16.1.41::backup --exclude-
from 1.txt

6  sending incremental file list

7  1.txt

8  dir1/

9  dir2/

10  dir3/

11  dir4/

12  dir5/
13


14  sent 229 bytes  received 67 bytes  197.33 bytes/sec

15  total size is 26  speedup is 0.09
16

17  #⽂件内容

18  [root@web01 ~]# cat 1.txt

19  dir10

20  dir6

21  dir7

22  dir8

23  dir9

2)限速参数 --bwlimit=100(默认单位为M)

1  #创建⼀个500M⽂件

2  [root@web01 ~]# dd if=/dev/zero of=./1.txt bs=1M count=500
3

4  #指定速度每秒1M

5  [root@web01 ~]# rsync -avzP --bwlimit 1 ./1.txt
rsync_backup@172.16.1.41::backup

6  sending incremental file list

7  1.txt

8      105,676,800  20%    1.01MB/s    0:06:46

3)数据⼀致 --delete(⽆差异同步)

1  拉:数据与服务端⼀致,以服务端的数据为准

2  推:数据与客户端⼀致,以客户端的数据为准

3

4  数据始终与  数据来源的⼀端保持⼀致

5

6  #拉取数据时与服务端⼀致

7  [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./ --delete

五、Rsync备份案例

1.准备服务器

主机名 外⽹IP 内⽹IP
web01 172.16.1.7 10.0.0.7
backup 172.16.1.41 10.0.0.41

需求:

客户端:

1.客户端提前准备存放的备份的⽬录,⽬录规则如下:/backup/nfs_172.16.1.31_2018-09-02

2.客户端在本地打包备份(系统配置⽂件、应⽤配置等)拷⻉⾄/backup/nfs_172.16.1.31_2018-09-02

3.客户端最后将备份的数据进⾏推送⾄备份服务器

4.客户端每天凌晨1点定时执⾏该脚本

5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

服务端需求:

1.服务端部署rsync,⽤于接收客户端推送过来的备份数据

2.服务端需要每天校验客户端推送过来的数据是否完整

3.服务端需要每天校验的结果通知给管理员

4.服务端仅保留6个⽉的备份数据,其余的全部删除

2.客户端

1)创建备份⽬录

1  [root@web01 ~]# hostname

2  web01

3  [root@web01 ~]# hostname -I | awk '{print $2}'
4  172.16.1.7

5  [root@web01 ~]# date +%F
6  2020-02-13

7  [root@web01 ~]# mkdir /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F` -p

8  [root@web01 ~]# mkdir /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F) -p

9  [root@web01 ~]# cd /backup/

10  [root@web01 backup]# ll

11  total 0

12  drwxr-xr-x 2 root root 6 Feb 13 11:35 web01_172.16.1.7_2020-02-13

2)打包⽂件并放到指定⽬录下

1  [root@web01 backup]# tar zcf /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`/file2.tar.gz /etc/passwd

3)推送⽂件

1  [root@web01 backup]# rsync -avz /backup/web01_172.16.1.7_2020-02-13 rsync_backup@172.16.1.41::backup

4)写成脚本并优化

1  #!/bin/bash

2  #1.定义变量

3  SRC=/backup

4  HOST=`hostname`

5  IP=$(hostname -I | awk '{print $2}')

6  DATE=$(date +%F)

7  DEST=${HOST}_${IP}_${DATE}
8

9  #2.创建⽬录

10  mkdir $SRC/$DEST -p
11

12  #3.备份⽂件

13  cd / && tar zcf $SRC/$DEST/file.tar.gz etc/passwd
14

15  #4.推送⽂件

16  export RSYNC_PASSWORD=123

17  rsync -az $SRC/$DEST rsync_backup@172.16.1.41::backup

5)客户端每天凌晨1点定时执⾏该脚本

1  [root@web01 backup]# crontab -l

2  #备份⽂件

3  * * * * * /bin/bash /scripts/client.sh

6)保留七天的数据

1  #创建⼀个⽉数据

2  [root@web01 backup]# for i in {1..30};do date -s 2020/02/$i;sh

/scripts/client.sh;done

3

4  #删除七天前数据

5  [root@web01 backup]# find /backup/ -type d -mtime +7 | xargs rm -rf

7)最后客户端脚本完善

1  #!/bin/bash

2  #1.定义变量

3  SRC=/backup

4  HOST=`hostname`

5  IP=$(hostname -I | awk '{print $2}')

6  DATE=$(date +%F)

7  DEST=${HOST}_${IP}_${DATE}
8

9  #2.创建⽬录

10  mkdir $SRC/$DEST -p
11

12  #3.备份⽂件

13  cd / && tar zcf $SRC/$DEST/file.tar.gz etc/passwd
14

15  #4.给⽂件添加验证信息

16  md5sum $SRC/$DEST/file.tar.gz > $SRC/$DEST/flag.txt
17

18  #5.推送⽂件

19  export RSYNC_PASSWORD=123

20  rsync -az $SRC/$DEST rsync_backup@172.16.1.41::backup
21

22  #6.只保留七天的数据

23  find $SRC -type d -mtime +7 | xargs rm -rf

8)客户端脚本判断⽂件是否存在

1  #!/bin/bash

2  #1.定义变量

3  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

4  SRC=/backup

5  HOST=$(hostname)

6  ADDR=$(ifconfig eth1|awk 'NR==2 {print $2}')

7  DATE=$(date +%F)

8  DEST=${HOST}_${ADDR}_${DATE}
9

10  #2.创建⽬录

11  mkdir -p $SRC/$DEST
12

13  #3.备份⽂件

14  cd / && \

15  [ -f $SRC/$DEST/sys.tar.gz ] || tar czf $SRC/$DEST/sys.tar.gz etc/fstab
etc/passwd && \

16

17  #4.使⽤md5sum做标记


18  [ -f $SRC/$DEST/flag_$DATE ] || md5sum $SRC/$DEST/sys.tar.gz  >

$SRC/$DEST/flag_$DATE

19

20  #5.本地推送到备份服务器

21  export RSYNC_PASSWORD=123456

22  rsync -avz $SRC/$DEST rsync_backup@172.16.1.41::backup
23

24  #6.保留最近七天数据

25  find $SRC/ -type d -mtime +7|xargs rm -rf

3.服务端

1)服务端脚本

1  #!/bin/bash

2  #1.定义变量

3  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

4  SRC=/backup

5  DATE=$(date +%F)
6

7  #2.验证⽂件的完整性

8  md5sum -c $SRC/*_$DATE/flag_$DATE > $SRC/result_$DATE
9

10  #3.将验证结果发送给管理员

11  mail -s "数据验证结果" 1240206455@qq.com < $SRC/result_$DATE
12

13  #4.只保留180天数据

14  find $SRC -type d -mtime +180 | xargs rm -rf

六、Rsync结合inotify实现实时同步

1.安装inotify

[root@web01 backup]# yum install -y inotify-tools

2.命令测试

[root@web01 backup]# inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup/

3.参数详解

1  -m 持续监控

2  -r 递归

3  -q 静默,仅打印时间信息

4  --timefmt 指定输出时间格式

5  --format 指定事件输出格式

6      %Xe 事件

7      %w ⽬录

8      %f ⽂件

9  -e 指定监控的事件

10      access 访问

11      modify 内容修改

12      attrib 属性修改

13      close_write 修改真实⽂件内容

14      open 打开

15      create 创建

16      delete 删除

17      umount 卸载

4.实时监控同步数据的脚本

1)粗糙版

1  [root@backup ~]# vim rsync-inotify.sh

2  #!/bin/bash

3  dir=/backup

4  /usr/bin/inotifywait  -mrq  --format '%w %f' -e
create,delete,attrib,close_write  $dir | while read line;do

5  cd  $dir  && rsync -az -R  --delete  ./*  rsync_backup@172.16.1.31::backup -

-password-file=/etc/rsync.passwd >/dev/null 2>&1

6  done  &

2)精油版

1  #!/bin/bash

2  src=/data

3  des=backup

4  rsync_passwd_file=/etc/rsync.passwd
5  ip1=172.16.1.41

6  user=rsync_backup

7  cd ${src}


8  /usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e
modify,create,delete,attrib,close_write,move ./ | while read file

9  do

10          INO_EVENT=$(echo $file | awk '{print $1}')

11          INO_FILE=$(echo $file | awk '{print $2}')

12          if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] ||
[[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]

13          then

14                  rsync -azcR --password-file=${rsync_passwd_file}

${INO_FILE} ${user}@${ip1}::${des}

15          fi

16          if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]

17          then

18                  rsync -azR --delete --password-file=${rsync_passwd_file}

$(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1

19          fi

20          if [[ $INO_EVENT =~ 'ATTRIB' ]]

21          then

22                  if [ ! -d "$INO_FILE" ]

23                  then

24                          rsync -azcR --password-file=${rsync_passwd_file}

$(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1

25                  fi

26          fi

27  done &

配置邮件

1.配置邮件

[root@backup ~]# yum install mailx -y
[root@backup ~]# vim /etc/mail.rc

set from=123@qq.com

set smtp=smtps://smtp.qq.com:465

set smtp-auth-user=123@qq.com

set smtp-auth-password=xxxxxx

set smtp-auth=login

set ssl-verify=ignore

set nss-config-dir=/etc/pki/nssdb/

2.验证能否成功的发送邮件

[root@backup ~]# mkdir /server/scripts -p

[root@backup ~]# cat /server/scripts/check_client_data.sh
 #!/bin/bash

#1.定义变量

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

SRC=/backup
DATE=$(date +%F)

 #1.使⽤md5进⾏校验,并保存校验的结果

md5sum -c $SRC/*_$DATE/flag_$DATE > $SRC/result_$DATE


#2.将保存的结果⽂件发送给管理员

 mail -s "Rsync Backup $DATE" XXXX@qq.com <$SRC/result_$DATE

posted on 2021-09-27 16:48  看啥  阅读(249)  评论(0编辑  收藏  举报