haojianyun

welcom to my haojianyun.com

以前经常通过一个定时脚本实现文件同步,隔断时间检查一下,但总感觉这个不太智能化,于是一顿考量,选择了强大的 inotifywait,废话少说看代码

  • 安装inotify-tools,我这测试环境是centos7
    • yum install inotify-tools
    • 不明白或报错可以查看 https://github.com/rvoicilas/inotify-tools/wiki
  • 检查系统是否支持 inotify
    • grep INOTIFY_USER /boot/config-$(uname -r) 如果输出是 CONFIG_INOTIFY_USER=y 代表可以
  • 预览我的配置文件,这个配置文件是从上面github的 inotify-tools来的

#!/bin/sh

# get the current path
CURPATH=`pwd`

ip="`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`"

inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' \
-e modify -e create -e delete -e move -e attrib  /mnt/fzdisk/sync/var/www/ | while read date time dir file; do

       rsync -a --delete /mnt/fzdisk/sync/var/www /root/t/var/  && \
       echo " $ip At ${date} ${time} www files was rsync" >> /mnt/fzdisk/log/$ip.log
done

用法很简单:

  1. ip 那个是获取当前服务器内网IP地址
  2. inotifywait 这个是运行文件系统通知服务,后面跟相应的路径,以及需要监听的事件,用多个 -e 表示 ,我上面是修改,创建,删除,移动,已经文件属性修改,都会触发下面的语句
  3. rsync 这个是文件同步命令,类似于cp命令,但比cp好用,我这个里用到了,
    • -a 表示全部更新,包括文件属性,已经子目录的遍历等
    • –delete 表示原有目录删除什么,我们要更新的这个目录也会更着删除

好了,具体参数你可以网上继续搜索一下,很多的

11月 16th, 2017

Posted In: computer knowledge(电脑知识)