Linux系统 文件同步、目录监听
安装软件
监听端:
监听本地文件,发生改动则上传至接收端
接收端:
被动接收监听端 传输的文件
监听端 安装: rsync 和 inotify
接收端 安装: rsync
接收端配置:密码、配置文件
配置文件:/etc/rsyncd.conf
# 配置用户组,默认给root权限
uid = root
gid = root
#模块名称(rsync_image)
[rsync_image]
#同步的路径
path=/home/backup_image
ignore errors
#是否只读,接收端接收文件,必须为false
read only=false
#是否可以写文件 (此项不太清楚作用,保留)[???待研究]
write only=true
#下面配置同步时候的身份,注意该身份是在rsync里面定义的,并非是本机实际用户。
#客户端获取文件的身份此用户并不是本机中确实存在的用户
#此处配置可以参考:(/etc/rsync_client.pass)
auth users=pw
#//用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 此文件权
#//限一定需要改为600,且属主必须与运行rsync的用户一致。
secrets file=/etc/rsync_client.pass
#允许所有主机访问(可以使用IP eg:192.168.1.2 192.168.1.3)
hosts allow=*
密码文件:/etc/rsync_client.pass
#还不太清楚 多个用户,多个模块如何配置,[???待研究]
#[双机认证的用户名]:[密码]
pw:pw123
监听端配置:密码、配置文件
配置文件:/etc/rsyncd.conf
# 模块名
[rsync_image]
# 同步的目录
path =/home/backup_test
ignore errors
# 是否只读
read only=false
# 允许的ip地址
hosts allow =* #192.168.1.46
hosts deny=0.0.0.0/32
# 认证用户名
auth users=pw
#密码文件
secrets file=/etc/pw.pass
密码文件:/etc/pw.pass
#监听端 = 上传端,配置的是密码,不需要配置用户名
pw123
启动rsync服务
默认启动服务端口:873
启动命令:
--config
加载的配置文件路径
rsync --daemon --config=/etc/rsyncd.conf
注意 监听端
和 接收端
服务都需要是启动状态
查看
rsync
服务启动状态,两种方式:
一、查看端口方式:lsof -i:873
二、查询服务:ps -ef | grep rsync
启动文件同步
测试同步,仅执行时同步`
#同步新增、修改,不包含删除
rsync -vzrtopg --progress --password-file=/etc/pw.pass /home/backup_test pw@192.168.1.46::rsync_image
#--delete 是否同步删除
rsync -vzrtopg --progress --delete --password-file=/etc/pw.pass /home/backup_test pw@192.168.1.46::rsync_image
–password-file:
密码文件
/home/backup_test:需要同步的目录
pw@192.168.1.46::rsync_image:用户名:IP::[模块名]
–delete:是否同步删除操作,不传[默认]不同步
测试单次同步
测试机介绍:
[root@poon-server01] : 监听端 - 本地IP:1.17
[root@bogon] : 接收端 - 本地IP:1.46
1.46同步1.17上 /home/backup_test 目录
1.17: 同步目录:/home/backup_test
1.46: 接收目录:/home/backup_image
1.17 目录下新建文件并上传至1.46
执行前1.17服务器内容: 空
[root@poon-server01 backup_test]# pwd
/home/backup_test
[root@poon-server01 backup_test]# ls
[root@poon-server01 backup_test]#
执行前1.46服务器内容:空
[root@bogon backup_image]# pwd
/home/backup_image
[root@bogon backup_image]# ls
[root@bogon backup_image]#
1.17 目录下生成文件,并同步
[root@poon-server01 backup_test]# vim 11.txt
[root@poon-server01 backup_test]# ls
11.txt
[root@poon-server01 backup_test]# mkdir test
[root@poon-server01 backup_test]# cp 11.txt test/
[root@poon-server01 backup_test]# ls
11.txt test
[root@poon-server01 backup_test]# cd test/
[root@poon-server01 test]# ls
11.txt
[root@poon-server01 test]# rsync -vzrtopg --progress --password-file=/etc/pw.pass /home/backup_test pw@192.168.1.46::rsync_image
sending incremental file list
backup_test/
backup_test/11.txt
8 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/4)
backup_test/test/
backup_test/test/11.txt
8 100% 7.81kB/s 0:00:00 (xfr#2, to-chk=0/4)
sent 247 bytes received 70 bytes 634.00 bytes/sec
total size is 16 speedup is 0.05
[root@poon-server01 test]#
1.46 目录如下
[root@bogon backup_image]# ls
backup_test
[root@bogon backup_image]# ls backup_test/
11.txt test
[root@bogon backup_image]# ls backup_test/test/
11.txt
[root@bogon backup_image]#
##监听端安装 inotify
下载安装源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
安装:
yum install inotify-tools -y
编写inotify监听脚本
#!/bin/bash
host=192.168.1.46
src=/home/backup_test
des=rsync_image
user=pw
pwdFile=/etc/pw.pass
#inotifywait -m:保持监听事件。-r:递归查看目录。-q:打印出事件。-e modify,delete,create,attrib:监听写入,删除,创建,属性改变事件。
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files
do
rsync -vzrtopg --progress --delete --password-file=$pwdFile $src $user@$host::$des
echo "${files} was rsynced" >>/var/log/rsyncd.log 2>&1
done
启动脚本后开始监听
/home/backup_test
目录的文件变动
–
inotify 参数说明
inotifywait参数 | 含义说明 |
---|---|
-r --recursive | 递归查询目录 |
-q --quiet | 打印很少的信息,仅仅打印监控事件的信息 |
-m,–monitor | 始终保持事件监听状态 |
–exclude | 排除文件或目录时,不区分大小写。 |
–timefmt | 指定时间输出的格式 |
–format | 打印使用指定的输出类似格式字符串 |
-e,–event | 通过此参数可以指定需要监控的事件,如下一个列表所示 |
-e :–event的各种事件含义
Events | 含义 |
---|---|
modify | 文件或目录内容被修改 |
attrib | 文件或目录属性被改变 |
close_write | 结束文件写入操作 |
move | 文件或目录被移动到另一个目录或从另一个目录移动至当前目录 |
create | 文件或目录被创建在当前目录 |
delete | 文件或目录被删除 |
access | 文件或目录被读取 |
close | 文件或目录封闭,无论读/写模式 |
open | 文件或目录被打开 |
moved_to | 文件或目录被移动至另外一个目录 |
umount | 文件系统被卸载 |
##防火墙
放开873端口 TCP/UDP
firewall-cmd --zone=public --add-port=873/tcp --permanent
firewall-cmd --zone=public --add-port=873/udp --permanent
重启防火墙后即可
##设置开机自启动
接收端
启动
rsync
服务即可
echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local
监听端
启动
rsync
服务
echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local
启动
inotify
监听脚本
echo "nohup /home/backup_files/backup_img.sh > /var/log/inotify_runlog.log 2>&1 &" >> /etc/rc.local
或
nohup /home/backup_files/backup_img.sh > /var/log/inotify_runlog.log 2>&1 &