1. <i id='h9ot'></i>
      <fieldset id='h9ot'></fieldset>

      <code id='h9ot'><strong id='h9ot'></strong></code>
    2. <tr id='h9ot'><strong id='h9ot'></strong><small id='h9ot'></small><button id='h9ot'></button><li id='h9ot'><noscript id='h9ot'><big id='h9ot'></big><dt id='h9ot'></dt></noscript></li></tr><ol id='h9ot'><table id='h9ot'><blockquote id='h9ot'><tbody id='h9ot'></tbody></blockquote></table></ol><u id='h9ot'></u><kbd id='h9ot'><kbd id='h9ot'></kbd></kbd>
      <ins id='h9ot'></ins>
      1. <dl id='h9ot'></dl>

        <acronym id='h9ot'><em id='h9ot'></em><td id='h9ot'><div id='h9ot'></div></td></acronym><address id='h9ot'><big id='h9ot'><big id='h9ot'></big><legend id='h9ot'></legend></big></address>
          1. <span id='h9ot'></span>
            <i id='h9ot'><div id='h9ot'><ins id='h9ot'></ins></div></i>

            linux inotify+rsync+ssh数据时时同步

            • 时间:
            • 浏览:3
            • 来源:124软件资讯网

              引用:

              Inotify 是文件系统事务监控机制  ,企图包罗在即将公布的 Linux 内核中作为 dnotify 的有用替换  。dnotify 是较早内核支持的文件监控机制  。Inotify一种强盛的、细粒度的、异步的机制  ,它知足种种各样的文件监控需要  ,不仅限于宁静和性能  。下面让我们一起学习怎样安装 inotify 和怎样构建一个示例用户空间应用法式来响应文件系统事务  。

              文件系统事务监控对于从文件治理器到宁静工具的种种法式都是须要的  ,可是 dnotify(早期内核中的尺度)存在一些局限性  ,这使我们期待泛起一种越发完善的机制  。抱着这种期待  ,我们发现了 inotify  ,一种越发现代化的文件系统事务监控替换品  。

              为什么使用 inotify  ?

              使用 inotify 取代 dnotify 的缘故原由有许多  。第一个缘故原由是 ,dnotify 需要您为每个计划监控是否发生改变的目录打开一个文件形貌符  。当同时监控多个目录时  ,这会消耗大量的资源  ,由于有可能到达每个历程的文件形貌符限制  。

              除此之外 ,文件形貌符会锁定目录  ,不允许卸载(unmount)支持的装备 ,这在存在可移动介质的情况中会引发问题 。在使用 inotify 时  ,若是正在监控被卸载的文件系统上的文件 ,那么监控会被自动移除而且您会吸收到一个卸载事务 。

              dnotify 不如 inotify 的第二个缘故原由是 dnotify 有点庞大  。注重  ,使用 dnotify 基础设施的简朴文件系统监控粒度只停留于目录级别  。为了使用 dnotify 举行更细粒度的监控  ,应用法式编程职员必须为每个受监控的目录保留一个 stat 结构的缓存  。该用户空间的 stat 结构缓存需要用来明确确定当吸收到通知信号时目录发生了什么转变  。当获得通知信号时  ,天生 stat 结构列表并与最新的状态相比力  。显而易见  ,这种手艺是不理想的  。

              inotify 的另一个优点是它使用文件形貌符作为基本接口 ,使应用法式开发者使用 select 和 poll 来监控装备  。这允许有用的多路 I/O 和与 Glib 的 mainloop 的集成 。相反  ,dnotify 所使用的信号经常使法式员头疼而且感受不太优雅  。

              inotify 通过提供一个更优雅的 API 解决了这些问题  ,该 API 使用最少的文件形貌符 ,并确保更细粒度的监控  。与 inotify 的通讯是通过装备节点提供的 。基于以上缘故原由  ,对于监控 Linux 2.6 平台上的文件 ,inotify 是您最明智的选择  。

              http://www-128.ibm.com/developerworks/cn/linux/l-inotify.html#N10081

              正文:
              sotfware: inotify-tools-3.13.tar.gz
              OS: ubuntu server 8.10
              server1: 192.168.6.2
              server2: 192.168.6.3

              需求 server1 目录 /home/ludy/rsync 时时同步 server2 /home/ludy
              安装步骤:
              1.首先确认你的内核支持inotify,若是不支持对内核打补丁 ,一样平常情形内核在 2.6.3以上的都支持的  。你可以确认下运行

              ludy@server1:~$ls -l /proc/sys/fs/inotify/
              总用量 0
              -rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_queued_events
              -rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_user_instances
              -rw-r--r-- 1 root root 0 2008-12-16 09:07 max_user_watches
              若是没有的话  ,呵呵安装inotify~

              2.安装软件 inotify-tools-3.13.tar.gz
              ludy@server1:~$ tar zxvf inotify-tools-3.13.tar.gz

              ludy@server1:~$ cd inotify-tools-3.13

              ludy@server1:~$ ./configure --prefix=/usr/local/inotify
              ludy@server1:~$ make
              ludy@server1:~$ make install

              2.天生SSH KEY 让 server1 ssh会见 server2不需要密码~
              ludy@server1:~$ ssh-keygen
              Generating public/private rsa key pair.
              Enter file in which to save the key (/home/ludy/.ssh/id_rsa): //输入回车
              Enter passphrase (empty for no passphrase): //输入密码回车
              Enter same passphrase again: //再输入确认后回车
              Your identification has been saved in /home/ludy/.ssh/id_rsa.
              Your public key has been saved in /home/ludy/.ssh/id_rsa.pub.
              The key fingerprint is:
              f1:35:4e:88:11:f1:c4:5a:7a:c9:2a:90:d3:5e:0a:6f ludy@ludy
              The key's randomart image is:
              +--[ RSA 2048]----+
              | ++. |
              | =o. |
              | o o=o.+ |
              | = . +o++ . |
              | * oSo. . |
              | E . |
              | . . |
              | |
              | |
              +-----------------+
              3.然后把你用户目录下的 .ssh/id_rsa.pub 拷贝到 server2 的root下(我作的测试以是用的root  ,你最好不要用root很危险~)

              ludy@server1:~/.ssh$ scp id_rsa.pub root@192.168.6.3:~/.ssh
              拷贝已往后 ,进入server2 id_rsa.pub 把 名字改为 authorized_keys
              root@server2:~/.ssh{GetProperty(Content)}nbsp; mv id_rsa.pub authorized_keys
              root@server2:~/.ssh$ shown root:root authorized_keys //改变使用者 root
              root@server2:~/.ssh$ chmod 600 authorized_keys //改变权限

              4.在server1编写shell剧本
              cat inosync.sh

              #!/bin/sh
              SRC=/home/ludy/rsync/
              DST=root@192.168.6.3:/home/ludy
              INWT=/usr/local/inotify/bin/inotifywait
              RSYNC=/usr/bin/rsync

              $INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
              rsync -aHqzt $SRC $DST
              done
              我诠释一下
              $INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
              rsync -aHqzt --delete $SRC $DST
              -m 是保持一直监听
              -r 是递归检察目录
              -q 是打印失事件~
              -e create,move,delete,modify
              监听 建立 移动 删除 写入 事务

              rsync -aHqzt $SRC $DST

              -a 存档模式
              -H 生存硬毗连
              -q 阻止非错误信息
              -z 压缩文件数据在传输
              -t 维护修改时间
              -delete 删除于多余文件
              5.测试

              ludy@server1:~$ ./inosync.sh &

              ludy@server1:~$ cd rsync

              ludy@server1:~/rsync$ touch asdfa

              在server2 机械检察

              root@server2:/home/ludy$ ls
              asdfa

              注重  ,可能第一次SSH 毗连的时间需要输入一次密码  ,以后就不需要输入了