业务需求
最近项目新增一个需求,将A目录下所有子文件及文件同步一份到B、C目录下。在不改变代码的前提下,利用中间件实现上述功能。
优点:再实际测试中发现,如果该目录已经为同步的目录,从其他的地方cp或scp到该目录时,大文件会损坏,需要使用rsync -az 命令进行同步传输。
软件安装
以centos7为例:
- 安装rsync和inotify
yum install rsync inotify
- 编写同步脚本,copyFile.sh
#!/bin/bash
#需要监控的目录,里面包含子文件夹及文件
src="/tmp/src/"
#目标目录1
dst1="/opt/dst1/"
#目标目录2
dst2="/opt/dst2/"
inotifywait -rm $src -e create -e modify -e attrib |
while read path action file; do
echo "File '$file' received in directory '$path' , starting sync"
rsync -aq "$src" "$dst1" && rsync -aq --remove-source-files "$src" "$dst2"
done
- 赋值权限,执行脚本
chmod 777 copyFile.sh
nohup ./copyFile.sh >/dev/null 2>&1 &