inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。本系统的出现取代了旧有Linux核心里,拥有类似功能之dnotify模块.需要linux2.6或以上的内核.
1. Inotify 不需要对被监视的目标打开文件描述符,而且如果被监视目标在可移动介质上,那么在 umount 该介质上的文件系统后,被监视目标对应的 watch 将被自动删除,并且会产生一个 umount 事件。
2. Inotify 既可以监视文件,也可以监视目录。
3. Inotify 使用系统调用而非 SIGIO 来通知文件系统事件。
4. Inotify 使用文件描述符作为接口,因而可以使用通常的文件 I/O 操作select 和 poll 来监视文件系统的变化。
Inotify 可以监视的文件系统事件包括:
- 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)
注:上面所说的文件也包括目录。
php默认是不提供支持inotify的扩展,所以我们需要通过pecl下载编译安装
下载inotify ( http://pecl.php.net/package/inotify),解压并安装:
tar -xvf inotify-0.1.6.tgz cd inotify-0.1.6 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
接着在php.ini文件中加载inotify.so,查看有没有加载成功可通过php -i|grep inotify或php -m 查看。
接着我们建立/data/inotify目录,然后用php写一个死循环的demo去监控目录
$notify = inotify_init(); $rs = inotify_add_watch($notify, '/dev/shm/inotify', IN_CREATE);//IN_CREATE表示只监控新文件的建立,具体参数列表可以在手册inotify处找到。 if(!$rs){ die('fail to watch /dev/shm/inotify'); } while(1){ $files = inotify_read($notify); print_r($files); echo 'continue to process next event'; }
使用inotify模块比不断地循环和scan目录要灵活且省资源,在inotify_read处,没有收到任何事件之前是会一直阻塞的,所以这里的while就不存在有没有操作都需要循环执行。
尝试在/dev/shm/inotify建立一个test.txt的新文件,会在inotify_read返回一个包含所有文件的数组,如:
Array ( [0] => Array ( [wd] => 1 [mask] => 256 [cookie] => 0 [name] => test.txt ) )
一般架构可以用一个daemon监控变化然后将变化写到日志中,然后再写个daemon读取日志做相应处理
$notify = inotify_init(); $rs = inotify_add_watch($notify, '/dev/shm/inotify', IN_CREATE);//IN_CREATE表示只监控新文件的建立,具体参数列表可以在手册inotify处找到。 if(!$rs){ die('fail to watch /dev/shm/inotify'); } while(1){ $files = inotify_read($notify); print_r($files); echo 'continue to process next event'; }
the more you will have to mark it up
weight loss tips What Is Fashion Marketing Management
weight loss tipsI own a second mortgage that isn’t paying