rsync 05-inotify使用

inotify简介

  • Inotify是一种强大的,细粒度的,异步的文件系统事件监控机制(软件)
  • linux内核从2.6.13起,加入了Inotify支持
  • 通过Inotify可以监控文件系统中添加,删除,修改,移动等各种事件
  • 利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况
  • 而inotify-tools正是实施这样监控的软件
  • 国人周洋在金山公司开发的sersync(inotify+rsync命令)

inotify安装

yum -y install inotify-tools

# 查看帮助
inotifywait --help

inotify编译安装

tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make && make install

ln -sv /usr/local/lib/libinotify* /usr/lib/
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

inotifywait命令参数

-r --recursive    # 递归查询目录
-q --quiet        # 打印很少的信息,仅仅打印监控事件的信息
-m,--monitor  # 始终保持事件监听状态
--exclude     # 排除文件或目录时,不区分大小写。
--timefmt     # 指定时间输出的格式
--format      # 打印使用指定的输出类似格式字符串
-e,--event        # 通过此参数可以指定需要监控的事件,如下一个列表所示

event的各种事件含义

access        # 文件或目录被读取
modify        # 文件或目录内容被修改
attrib        # 文件或目录属性被改变
close     # 文件或目录封闭,无论读/写模式
open      # 文件或目录被打开
moved_to  # 文件或目录被移动至另外一个目录
move      # 文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create        # 文件或目录被创建在当前目录
delete        # 文件或目录被删除
umount        # 文件系统被卸载

关键参数调整

  • 在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
max_user_watches
    设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

max_user_instances
    设置每个用户可以运行的inotifywait或inotifywatch命令的进程数

max_queued_events
    设置inotify实例事件(event)队列可容纳的事件数量

inotifywait案例

# 测试create
inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w%f' -e create /backup

# 测试多个事件
/usr/local/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move /mnt/data

inotify+rsync 脚本案例

#!/bin/bash
src=/mnt/data/files/service
#src=/data                       
#des=/data                                     
ip1=192.168.10.1                 
user=root                         
cd ${src}                            
/usr/local/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ${src} | while read file
do
        INO_EVENT=$(echo $file | awk '{print $1}')
        INO_FILE=$(echo $file | awk '{print $2}')
        INO_DIRNAME_DIR=$(dirname ${INO_FILE})
        INO_BASENAME_DIR=$(basename ${INO_FILE})
        #echo ${file}                                   # file= MODIFY /data/liang
        #echo ${INO_EVENT}                              # MODIFY
        #echo ${INO_FILE}                               # /data/liang
        #echo ${INO_DIRNAME_DIR}                        # /data
        #echo ${INO_BASENAME_DIR}                       # liang

        LOG_DATE=`date "+%Y-%m-%d %H:%M:%S"`            # 2018-09-29 16:34:28

        echo ${LOG_DATE} : ${file}


        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]]
        then
                des=${INO_DIRNAME_DIR/mnt/wotv}
                echo ${LOG_DATE} : "rsync -avz ${INO_FILE} -e 'ssh -p 222' ${user}@${ip1}:${des}"
                echo -----------------------------------------------------------
                rsync -avz ${INO_FILE} -e 'ssh -p 222' ${user}@${ip1}:${des}  > /tmp/lianglog.tmp
                cat /tmp/lianglog.tmp && rm -rf /tmp/lianglog.tmp
                
                echo -----------------------------------------------------------
        fi
done
后台运行脚本
nohup sh /mnt/liang/wotv_picture.sh >> /var/log/liangrs_wotvpicture.log &

转载于:https://www.cnblogs.com/liangjingfu/p/9759113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值