LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: 河边星星

来点好玩的---文件目录有变动的时候触发相应的指令。

[复制链接]
 楼主| 发表于 2007-5-24 00:53:40 | 显示全部楼层
安装最新
inotify-tools-3.10.tar.gz

如下脚本
inotifywait -mrq -e modify -e delete -e create -e move /tmp | while read outinfo ;
do
echo  $outinfo
done


/tmp/orbit-peter/ DELETE linc-4040-0-7b533e1c1185d
/tmp/gconfd-peter/lock/ CREATE 1t1179938842ut94987u1000p16460r1902510133k3220194440
/tmp/gconfd-peter/lock/ DELETE ior
/tmp/gconfd-peter/lock/ DELETE 1t1179938842ut94987u1000p16460r1902510133k3220194440
/tmp/gconfd-peter/ DELETE,ISDIR lock
/tmp/gconfd-peter/lock/ IGNORED
/tmp/orbit-peter/ DELETE linc-404c-0-7b8812fdbf983
/tmp/ CREATE,ISDIR v955855
/tmp/v955855/ MODIFY 0
/tmp/v955855/ DELETE 0
...........
我会将其转换到mysql表中,然后用ssh互信任后以及scp限量方式去做同步
回复 支持 反对

使用道具 举报

发表于 2007-6-1 15:16:10 | 显示全部楼层
Incron的安装配置和使用
Incron是inotify的cron系统,与os本身的cron一样,包含一个后台守护进程(incrond)和一个事件编辑器(incrontab),与os本身的cron不同的仅仅是触发时间的是os对某个文件(夹)的操作而不是时间。

由系统事件触发的机制,对于某些应用系统来说,几乎可以做到实时性。



本次试验基于Redhat新发布的RHEL5 server(内核2.6.18)。

安装incron的需求:



1. Linux内核2.6.13或以上(编译时包含inotify)

2. Inotify 头文件(inotify.h和inotify-syscalls.h),RHEL5已经包含inotify.h且不需要inotirfy-systemcalls.h

3. GCC 4.x(manual中说GCC 3.4或以下的版本也可以,但没有做测试)



可以在inotify的站点下载以下源码包

http://inotify.aiken.cz/?section=common&page=home&lang=en



源码包:incron-0.5.5.tar.bz2

安装过程没有什么特殊,仅仅不需要configure:



# tar jxf incron-0.5.5.tar.bz2

# cd incron-0.5.5

# make

# make install



安装完毕后会得到二进制文件incrond和incrontab,且已经放到了系统的PATH中,可以直接使用。



1. 启动后台守护进程

# incrond

2. 执行incrontab,配置触发事件

# incrontab -e



格式如下:

<path> <mask> <command>

其中:

<path>:欲监控的文件(夹)

<mask>:os对监控对象发生的动作,具体的动作可以在inotify.h中查找,如下:



IN_ACCESS,即文件被访问

IN_MODIFY,文件被 write

IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等

IN_CLOSE_WRITE,可写文件被 close

IN_CLOSE_NOWRITE,不可写文件被 close

IN_OPEN,文件被 open

IN_MOVED_FROM,文件被移走,如 mv

IN_MOVED_TO,文件被移来,如 mv、cp

IN_CREATE,创建新文件

IN_DELETE,文件被删除,如 rm

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

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

IN_UNMOUNT,宿主文件系统被 umount

IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)



注:上面所说的文件也包括目录,<mask>可以是多个动作,中间用逗号”,”隔开。



<command>:command可以是系统命令,也可以是脚本,但我发现不能是用系统的重定向,除非重定向写在脚本中。Command中还可以使用下面的这些变量:



$@:代表<path>,即监控对象

$#:发生系统事件的对象(例如监控了某个文件夹,其下的某个文件发生了变化,那么$#就代表了该文件名)

$%:代表<mask>,即发生的事件



举例:

/data/file1 IN_MODIFY script1 $@/$#

表示文件file1一旦被修改,就以它的绝对路径为参数执行脚本script1



By Joshua Liao
回复 支持 反对

使用道具 举报

发表于 2007-6-1 15:18:35 | 显示全部楼层
上面是我做incrond实验时写的incrond安装方法,你可以不装rhel5,编译一个内核就可以了。希望对你有帮助。
回复 支持 反对

使用道具 举报

发表于 2007-6-1 16:00:34 | 显示全部楼层
看起来很有意思。。不错。。加入收藏。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-3 14:08:48 | 显示全部楼层
因为inotify好像没办法分清
文件的异动源是来自本机和其它主机,

我要是做几台主机异动文件目录自动传递同步,这样好像会导致死循环了。
有解?
回复 支持 反对

使用道具 举报

发表于 2007-6-3 20:55:39 | 显示全部楼层
关于文件目录的同步问题,最简单的是用rsync,另外功能稍强的有unison,csync2,tsync等。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-3 21:01:01 | 显示全部楼层
有优先设定吗?
有流量控制吗?
有分切功能吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表