zoukankan      html  css  js  c++  java
  • rsync 和 inotify 结合

    我们知道 rsync 可以实现推送和拉取,而 inotify-tools 借助内核的 inotify 机制实现了文件的 实时监控。因此,借助这个思路,我们可以通过使用 shell 脚本,调整 inotifywait 的输出格式, 然后借助 inotifywait 的监控文件或目录实时变化去通知 rsync 做相应的推送或者拉取操作! 实时备份脚本

    [root@rsync-client-inotify ~]# cat auto_rsync.sh

    src1='/data/web/redhat.sx/'

    src2='/data/web_data/redhat.sx/' des1=web

    des2=data host1=172.16.100.1 host2=172.16.100.1 user=rsync_backup

    allrsync='/usr/bin/rsync -rpgovz --delete --progress'

    /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %w

    %f %e' -e modify,delete,create,attr

    ib $src | while read DATE TIME DIR FILE EVENT;

    do

    case $DIR in

    ${src1}*)

    $allrsync $src1 $user@$host1::$des1 --password-file=/etc/rsync.password && echo "

    $DATE $TIME $FILE was rsynced" &>> /var/log

    /rsync-$des1-$host1.log

    $allrsync $src1 $user@$host2::$des1 --password-file=/etc/rsync.password && echo "

    $DATE $TIME $FILE was rsynced" &>> /var/log

    /rsync-$des1-$host2.log;;

    ${src2}*)

    $allrsync  $src2 $user@$host1::$des2 --password-file=/etc/rsync.password && echo "

    $DATE $TIME $FILE was rsynced" &>> /var/lo g/rsync-$des2-$host1.log

    $allrsync  $src2 $user@$host2::$des2 --password-file=/etc/rsync.password && echo "

    $DATE $TIME $FILE was rsynced" &>> /var/lo

    g/rsync-$des2-$host2.log;;                                                                                                        

    esac done 加入开机自启动

    另外,为了保证开机之后自动开始实时同步备份,因此我们需要将该脚本加入开机自启动, 并且设置在启动的时候,将脚本执行输出重定向到指定日志文件以及放到后台运行! [root@rsync-client-inotify ~]# chmod o+x auto_rsync.sh

    [root@rsync-client-inotify ~]# mv auto_rsync.sh /usr/sbin/ [root@rsync-client-inotify ~]# vim /etc/rc.local

    Bash /usr/sbin/auto_rsync.sh &>> /var/log/auto_rsync.log & 我在这里模拟分别向/data/web/redhat.sx 和/data/web_data/redhat.sx 各写入 10 个 10M 的小文件

    [root@rsync-client-inotify ~]# bash /usr/sbin/auto_rsync.sh &>> /var/log/auto_rsync. log &

    [1] 40802

    [root@rsync-client-inotify ~]# for i in {1..10};do dd if=/dev/zero of=/data/web/redhat. sx/$i.html bs=10M count=1 ;dd if=/dev/zero of=/data/web_data/redhat.sx/$i.html bs

    =10M count=1;done

  • 相关阅读:
    安全运维中基线检查的自动化
    解决“指定的服务已经标记为删除”问题
    linux让命令或程序在终端后台运行的方法(Ubuntu/Fedora/Centos等一样适用)
    微信小程序、SSL证书、开启服务器TSL1.0、TSL1.1、TSL1.2服务
    linux screen工具
    11.2.0.1升级到11.2.0.4报错之中的一个:UtilSession failed: Patch 9413827
    swift 编译提前定义 --不知道怎么定义,可是能够#if
    编译安装 gcc 4.9并验证使用
    sparkR处理Gb级数据集
    【J2EE】在项目中理解J2EE规范
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11327241.html
Copyright © 2011-2022 走看看