一、RSYNC的使用
1、特点
可以镜像保存整个⽬录树和⽂件系统
可以保留原有的权限,时间,软硬链接,⽂件,⽂件属性信息等
传输==效率⾼==,使⽤同步算法,只⽐较变化的(增量备份)
⽀持匿名传输,⽅便⽹站镜像;也可以做验证,加强安全
2、基本语法
上传:rsync 选项 上传文件 上传地址
下载:rsync 选项 下载地址 下载文件
扩展:
-v 详细模式输出 -a 归档模式,递归的⽅式传输⽂件,并保持⽂件的属性,equals -rlptgoD -r 递归拷⻉⽬录 -l 保留软链接 -p 保留原有权限 -t 保留原有时间(修改) -g 保留属组权限 -o 保留属主权限 -D 等于--devices --specials 表示⽀持b,c,s,p类型的⽂件
-R 保留相对路径 -H 保留硬链接 -A 保留ACL策略 -e 指定要执⾏的远程shell命令,ssh更改端⼝常⽤选项-E 保留可执⾏权限 -X 保留扩展属性信息 a属性—delete 同步删除目录中多余的文件
3、rsync作为系统服务
rsyncd服务的配置⽂件/etc/rsyncd.conf
# uid = nobody 用户编号
# gid = nobody 所属组编号
# use chroot = yes 是否禁锢目录
# max connections = 4 最大连接数
# pid file = /var/run/rsyncd.pid 进程文件,每个服务都有有个PID编号,其中源就是PID文件
# exclude = lost+found/ 传输文件时,忽略lost+found/目录
# transfer logging = yes 传输日志是否需要写入日志文件
# timeout = 900 传输超时时间,默认15分钟
# ignore nonreadable = yes 是否忽略不可读文件
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 以下文件格式不压缩
4、编写计划任务 + Shell的脚本⽂件,⾃动实现代码备份
① 编写计划任务
3 1 * * * /root/rsync_java.sh
② 编写rsync_java.sh脚本程序
# vim rsync_java.sh
#!/bin/bash
rsync -av root@10.1.1.10::app /backup/app1_java &>/dev/null
# chmod +x rsync_java.sh
5、给RSYNC服务添加密码
① 打开/etc/rsyncd.conf配置⽂件
# vim /etc/rsyncd.conf
[app]
path=/app/java_project
log file=/var/log/rsync.log
auth users = user1,user2 => ⽤户名
secrets file = /etc/rsyncd.secrets => 密码⽂件
② 在/etc⽬录下创建rsyncd.secrets⽂件
# vim /etc/rsyncd.secrets
user1:123 => 设置密码,⽤户名:密码
user2:123
③ 更改密码⽂件权限为600
# chmod 600 /etc/rsyncd.secrets
④ 重启rsyncd服务
# systemctl restart rsyncd
二、RSYNC集合INOTIFY⼯具实现代码实时同步
1、直接安装inotify-tools
yum -y install inotify-tools
/usr/bin/inotifywait 等待
/usr/bin/inotifywatch 看守
/usr/bin/inotifywait-m : ⼀直监控某个⽬录,create、delete、modify等⾏为
-r : 递归,不仅仅监控⽬录还要监控⽬录下的⽂件
-q : 获取操作信息,但是不输出
-e : 哪些⾏为需要被监控,
modify,delete,create,attrib,move
modify: ⽂件被修改
delete: ⽂件被删除
create: ⽂件被创建
attrib: ⽂件属性被修改
move: ⽂件被移动
2、编写inotify.sh
vim inotify.sh
#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/studentweb|while read events
do
rsync -av --delete /app/studentweb/ root@192.168.2.155:/opt/
done
3、添加可执⾏权限
# chmod +x inotify.sh
4、让inotify.sh⽂件⼀直执⾏下去
# nohup ./inotify.sh &