rsync+inotify 脚本 注意 -e 选项的端口号
admin
2023-03-07 19:02:46
0

#!/bin/bash
src=/apps/dockerfiles/lnmp/nginx/html/aiitle/aiitle_backend/public/uploads/ # 需要同步的源路径
des=upload/ # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsyncd.passwd # rsync验证的密码文件
ip1=192.168.8.10 # 目标服务器1
#ip2=192.168.0.19 # 目标服务器2
user=root # rsync --daemon定义的验证用户名
cd ${src} # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进
行各种尝试观看其效果
/usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把监控到有发生更改的"文件路>径列表"循环

do
INO_EVENT=$(echo $file | awk '{print $1}') # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
INO_FILE=$(echo $file | awk '{print $2}') # 把inotify输出切割 把文件路径部分赋值给INO_FILE
echo "-------------------------------$(date)------------------------------------" >>/var/log/rsync.log 2>&1
echo $file >>/var/log/rsync.log 2>&1
#增加、修改、写入完成、移动进事件
#增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判断事>件类型
then
echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO' >>/var/log/rsync.log 2>&1
rsync -avzcR -e 'ssh -p 10222' --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && # INO_FILE变量代表路
径哦 -c校验文件内容
rsync -avzcR -e 'ssh -p 10222' --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des} >>/var/log/rsync.log 2>&1
#仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极>端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
fi
#删除、移动出事件
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
echo 'DELETE or MOVED_FROM' >>/var/log/rsync.log 2>&1
rsync -avzR -e 'ssh -p 10222' --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzR -e 'ssh -p 10222' --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des} >>/var/log/rsync.log 2>&1
#看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除>目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
fi
#修改属性事件 指 touch chgrp chmod chown等操作
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB' >>/var/log/rsync.log 2>&1
if [ ! -d "$INO_FILE" ] # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新
此目录。
then
rsync -avzcR -e 'ssh -p 10222' --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzcR -e 'ssh -p 10222' --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des} >>/var/log/rsync.log 2>&1
fi
fi
done

相关内容

热门资讯

黄土塬藏“算力密码”!中国电信... 在陇东黄土塬上,数字浪潮奔涌不息。作为国家 “东数西算” 工程的核心承载地,中国电信庆阳智算产业园正...
科沃斯加入清洁电器行业反虚假测... 【CNMO科技消息】5月8日,科沃斯官方微博宣布,科沃斯加入由中国家用电器协会指导、中国家电网发起成...
东华科技获得发明专利授权:“一... 证券之星消息,根据天眼查APP数据显示东华科技(002140)新获得一项发明专利授权,专利名为“一种...
头部企业扎堆超百场无人机赛事,... 文/陈聆听 2026 年 5 月 4 日,山东诸城,山东天鸟航空负责人丁总与当地多位中小学校长会面,...
重磅签约!华为、中国银联战略合... 快科技5月8日消息,华为和中国银联在深圳正式签约,进一步深化双方的战略合作,还一起发布了自主创新和人...
胡锡进:日本已成中国“头号潜在... 日本高市早苗政府代表了日本政治思维,特别是对华策略最阴暗的一面,这个女人绝对是“政治女巫”级别的。中...
“190元榴莲遭仅退款”商家:... 近日,河南濮阳一冷冻榴莲果肉商家“程大叔”反映,自己遭遇一名买家恶意“仅退款”。为讨回公道,4月28...
新价格项目落地,让医疗真创新更... “让瘫痪的人能动、心衰末期的人能活、万里之外能手术”,这些看似奇迹的变化,背后藏着一个关键支撑—近三...
苹果宣布在印度扩大三项环保举措... 【CNMO科技消息】近日,苹果宣布扩大在印度的环保举措,共推出三个相关项目,覆盖清洁能源、塑料污染治...
华为在数字中国建设峰会:只有根... 作者:王聪彬 “根技术、落地”是华为在第九届数字中国建设峰会想要传递出的两个关键字。 “根技术”顾名...