src=/app/a
des=/app/b
# set -x -o #调试模式
set -e -o nounset # 变量未初始化自动退出,脚本中间执行异常也会自动退出
logfile=/tmp/$(basename $0).log
exec > $logfile 2>&1
cd $src
inotifywait -mrq --format '%Xe %w%f' --excludei '(.*/\.|.lock$|.tmp$|.swp$|~$)' -e modify,create,delete,attrib,close_write,move $src | while read file
#inotifywait -mrq --format '%Xe %w%f' --excludei '(.*/\.|.lock$|.tmp$|.swp$|~$)' $src | 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)------------------------------------"
desdir=$des/$(dirname $INO_FILE | sed "s#^$src##")/
echo $(date +%Y-%m-%dT%T%:z) $INO_EVENT $INO_FILE $desdir
case $INO_EVENT in
'CREATE'|'MODIFY'|'CLOSE_WRITE'|'MOVED_TO'|'CLOSE_WRITEXCLOSE'|'CLOSE_NOWRITEXCLOSEXISDIR'|'CREATEXISDIR'|'MOVED_TOXISDIR' ) rsync -Pavc $(dirname ${INO_FILE})/ $desdir ;;
'DELETE'|'MOVED_FROM'|'DELETEXISDIR'|'MOVED_FROMXISDIR' ) rsync -avz --delete $(dirname ${INO_FILE})/ $desdir ;;
'ATTRIB' ) [ ! -d "$INO_FILE" ] && rsync -Pavc $(dirname ${INO_FILE})/ $desdir ;;
esac
done
参考来源:
http://www.ttlsa.com/web/let-infotify-rsync-fast/
注意: cephfs 12 目前还不支持 inotify 的检测方式 http://tracker.ceph.com/issues/15507
ceph 14 已经支持部分信号,以上脚本测试支持。
网友评论