美文网首页
利用Rsync和Inotify实现触发式文件同步

利用Rsync和Inotify实现触发式文件同步

作者: HeyLehr | 来源:发表于2020-02-17 15:56 被阅读0次

    Rsync

    介绍

    • 一款备份工具

    • 异地传输每次要写脚本或者去手动scp就很麻烦

    • 支持完全备份(全部重来)和增量备份(只修改变化的)

    • 差量传输!!!(所以文件多了效率也会低)

    工作指令

    格式: rsync -options 源文件 远程主机:远程地址

    常见参数

    -r 对子目录递归处理

    -l 拷贝链接文件

    -p 保持权限

    -t 保持原文件时间

    -g 保持原组

    -o 保持所属者

    -D 表示块设备文件信息

    -z 表示压缩传输

    -H 表示硬连接文件

    -P 显示进度

    --delete 删除远程地址里不同步的多出来的文件

    -a 就是-rlptgoD的缩写

    所以我们一般使用:-azP

    准备

    • 如果你是CentOS就yum

    • 如果你是Ubuntu系就apt

    • 如果你是Mint玩家那就已经自带了

    • 然后为了懒得演示输入密码的过程,就提前做好秘钥配对

    ssh-keygen + ssh-copy-id不解释

    Ps: 因为我比较懒所以直接root了(然而我知道这样是不好的......

    实战

    文件创建

    A机:创建目录/myRsync,并在本目录下创建10个文件

    image-20200121120134619

    B机:创建目录/myBackup,里面什么都没有

    image-20200121115850583

    开始传输

    A机:

    image-20200121120255733

    输入:rsync -azP --delete "本机目录" 远程登录的用户@远程主机:远程位置 (后面和scp是一样的)

    image-20200121120459550

    传输成功!!!

    看看B机:

    image-20200121120523021

    Done!

    出现的小问题

    • 每次都是手动push
    • 如果用定时的话,很浪费资源
    • 所以能不能在每次文件改变的时候自动push呢?

    当然可以了!!!

    结合inotify-tools

    inotify-tools是什么

    inotify说白了就是内核提供的一个文件系统事件监控机制(所以你要用的话前提是你内核版本高于2.6.13)

    而inotify-tools就是一个可以利用这个内核接口获取情况的工具

    所以说我们利用这个东西再结合上rsync就可以实现自动备份啦!

    安装tools

    image-20200121121811517

    简单使用

    首先来看两个东西:

    inotifywait:比较常用,检查文件是否被操作(执行后处于阻塞状态)

    inotifywatch:多偏向于统计次数

    我们来看下面一个例子:

    image-20200121133741253

    我们使用到了这条指令:

    inotifywait -mrq -e create,delete,modify /myRsnyc/

    这条指令的意思就是:监听这个文件夹里发生的创建,修改,删除操作(-e就是指定监听指定的事件,如果省略,表示所有事件都进行监听,一共有四种选择,我们选了三种,还有一种是close_write),而且始终保持事件监听(-m)、递归监控目录数据信息变化(-r)、只打印事件信息(-q)

    所以我们接下来可以写一个组合脚本来进行自动处理了

    结合脚本

    这里我们先做一个单相同步:把A机的新文件自动同步到B机去

    脚本如下:

    # !/bin/bash
    a="inotifywait -mrq -e create,delete,modify,close_write /myRsync/"    #表示我们会去监听/myRsnc这文件夹里的所有事件
    b="rsync -azP  --delete /myRsync/* root@192.168.3.84:/backup"    #表示我们要执行的rsync指令,和之前一样的
    
    $a | while read directory event file
    do
            $b
    done
    

    跑一下试试:

    输入nohup ./你的文件的位置/脚本名字.sh &

    那个&代表让其自动运行,不被ctrl+c杀掉,当然如果你账户退出了也一样没了,所以结合了nohup使用,一直挂在后台运行.

    另外注意一下给脚本权限(我懒我root别学我)

    image-20200121141038507

    整挺好的,不错,就这样了

    相关文章

      网友评论

          本文标题:利用Rsync和Inotify实现触发式文件同步

          本文链接:https://www.haomeiwen.com/subject/wznbfhtx.html