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

  • 相关阅读:
    医疗设备软件的安全性问答
    python使用技巧
    C++对象模型
    面向对象方法综述
    如何设计可扩展性系统架构
    敏捷过程
    python中import的相关知识总结
    软件架构的关键原则
    读后感——程序员的思维修炼
    LINUX系统备份工具
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11327241.html
Copyright © 2011-2022 走看看