inotify+rsync原理实验详解


一、rsync介绍:

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来--remote sync


特性:

l可以镜像保存整个目录树和文件系统。

l可以很容易做到保持原来文件的权限、时间、软硬链接等等。

l无须特殊权限即可安装。

l快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

l安全:可以使用scpssh等方式来传输文件,当然也可以通过直接的socket连接。

二、inotify介绍:

inotify可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。此外,inotify 使用文件描述符作为接口,因而可以使用通常的文件I/O操作selectpollepoll来监视文件系统的变化。


inotify可以监视的文件系统常见事件包括:

2IN_ACCESS:文件被访问

2IN_MODIFY:文件被修改

2IN_ATTRIB,文件属性被修改

2IN_CLOSE_WRITE,以可写方式打开的文件被关闭

2IN_CLOSE_NOWRITE,以不可写方式打开的文件被关闭

2IN_OPEN,文件被打开

2IN_MOVED_FROM,文件被移出监控的目录

2IN_MOVED_TO,文件被移入监控着的目录

2IN_CREATE,在监控的目录中新建文件或子目录

2IN_DELETE,文件或目录被删除

2IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

2IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己

三、inotify-tools

inotify是一个API,需要通过开发应用程序进行调用,对于大多数用户来讲这有着许多不便,inotify-tools的出现弥补了这一不足。inotify-tools是一套组件,它包括一个C库和几个命令行工具,这些命令行工具可用于通过命令行或脚本对某文件系统的事件进行监控。


inotify-tools提供的两个命令行工具:

Ønotifywait:通过inotify API等待被监控文件上的相应事件并返回监控结果,默认情况下,正常的结果返回至标准输出,诊断类的信息则返回至标准错误输出。它可以在监控到对应监控对象上指定的事件后退出,也可以进行持续性的监控。

Øinotifywatch:通过inotify API收集被监控文件或目录的相关事件并输出统计信息。


inotifywait命令使用简介:

inotifywait尤其适用于在脚本中等待某事件的发生,并可基于特定的事件执行相应操作。如将其用于脚本中监控某指定目录中的文件上的修改、新建、删除、属性信息的改变,而后使用rsync命令将某事件对应的文件同步至其它主机上。其常用选项如下:

l-m, --monitorinotifywait的默认动作是在监控至指定文件的特定事件发生一次后就退出了,而使用此选项则可实现持续性的监控;

l-r, --recursive:递归监控指定目录下的所有文件,包括新建的文件或子目录;如果要监控的目录中文件数量巨大,则通常需要修改/proc/sys/fs/inotify/max_users_watchs内核参数,因为其默认值为8192

l-e <event>, --event<event>:指定要监控的特定事件,默认是监控所有的事件;此处<event>包括access, modify, attrib,close_write, close_nowirte, close, open, moved_to, moved_from, move, create,delete, delete_selt等;

l--timefmt <fmt>:当在--format选项中使用%T时,--timefrt选项则可以用来指定自定义的符合strftime规范的时间格式,此时间格式可用的格式符可以通过strftime的手册页获取;--timefrt后常用的参数是'%d/%m/%y %H:%M'

l--format <fmt>:自定义inotifywait的输出格式,如--format '%T %w %f';常用的格式符如下:

%w:显示被监控文件的文件名;

%f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;

%T:使用--timefmt选项中自定义的时间格式;

四、inotify+rsync实验过程:

服务器 IP地址 文件路径
files 172.16.2.1 /www/webpages
web01
172.16.2.2 /www/webpages


配置过程:

  • files配置:

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    1、安装inotify:
    # tar xf inotify-tools-3.14.tar.gz
    # cd inotify-tools-3.14
    # ./configure && make && make install
    # mkdir /root/scripts
                                                                                                                                                                                                                                                                                                  
    # vim /root/scripts/in_rsync.sh   编写脚本内容如下:
    #!/bin/bash
    host1=172.16.2.2
    src= /www/webpages
    dst1=web01
    user1=root
    /usr/local/bin/inotifywait  -mrq --timefmt  '%d/%m/%y %H:%M'  -- format  '%T %w%f%e'  -e modify,delete,create,attrib  $src \
    while  read  files; do
    /usr/bin/rsync  -zrtopg   --delete --password- file = /etc/rsyncd .pass $src  $user1@$host1::$dst1 > /dev/null  2>&1
       echo  "${files} was rsynced"  >> /tmp/rsync .log 2>&1 > /dev/null
    done
    # chmod +x /root/scripts/in_rsync.sh
    # setenforce 0
    # service iptables stop
    # vim /etc/rsyncd.pass
    rsync
    # chmod 600 /etc/rsyncd.pass
    # nohup /root/scripts/in_rsync.sh &   //挂载到后台执行同步
    # echo “nohup /root/scripts/in_rsync.sh &” >>/etc/rc.local  //添加到开机启动中

    web服务器配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # yum install xinetd rsync –y
    # vim /etc/rsyncd.conf  //添加以下内容
    #Global Settings
    uid = root  
    gid = root
    use chroot = no
    max connections = 20
    strict modes =  yes      
    log  file  /var/log/rsyncd .log   
    pid  file  /var/run/rsyncd .pid  
    lock  file  /var/run/rsync .lock 
    log  format  = %t %a %m %f %b
    [web01]                      
    path =  /www
    auth  users  = root
    read  only = no
    hosts allow =172.16.2.0 /24
    list = no
    uid = root
    gid = root  
    secrets  file  /etc/rsyncd .pass
    ignore errors =  yes
    # vim /etc/rsyncd.pass  //添加以下内容:
    root: rsync
    # chmod 600 /etc/rsyncd.pass  //设置600权限。
    # setenforce 0
    # service iptables stop
    # /usr/bin/rsync –daemon  //启动rsync
    # echo “/usr/bin/rsync --daemon” >>/etc/rc.local  //添加开机自动启动


  • 安装apache

   可以参考上一篇《企业级LAMMP架构应用实践》 博文描述进行部署。

   在files服务器上的/www/webpages下添加一个文件,然后在web01上的/www/webpages/下也可以看到同步一个文件,如下图所示:

当然修改和删除文件均可以实时同步,如果是多台web服务器,就可以保证web的页面是一样的了。

inotify+rsync实验完成!

本文出自 “时光的印记” 博客,请务必保留此出处http://lanlian.blog.51cto.com/6790106/1286638


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中实现机械臂的仿真可以使用Robotic System Toolbox来进行。Robotic System Toolbox包含许多工具和函数,可以实现机械臂的建模、控制和仿真。 首先,需要定义机械臂的模型。可以使用robotics.RigidBodyTree类来创建机械臂的刚体树结构。通过添加关节和刚体可以构建机械臂的结构。可以使用函数robotics.RigidBody来创建刚体,并使用函数robotics.Joint来创建关节。 接下来,可以使用robotics.RigidBodyTree类中的函数来定义机械臂的初始状态。可以设置每个关节的初始位置和速度。 然后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的运动控制。可以使用函数robotics.InverseKinematics来实现逆运动学,根据目标位置和姿态来求解关节角度。可以使用函数robotics.CartesianTrajectory来生成机械臂的轨迹,指定起始和目标位置以及运动时间。 最后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的仿真。可以使用函数robotics.Rate来指定仿真的频率,然后使用循环来更新机械臂的状态和控制输入,实现机械臂的运动。 以下是一个基本的机械臂仿真的示例代码: ```matlab % 创建机械臂模型 robot = robotics.RigidBodyTree; % 添加机械臂的关节和刚体 % 设置机械臂的初始状态 % 运动控制 % 仿真循环 % 绘制机械臂的运动轨迹 ``` 在实际的机械臂仿真中,可能还需要考虑机械臂的动力学、碰撞检测和路径规划等问题。可以使用Robotic System Toolbox中的其他工具和函数来处理这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值