Python pyinotify日志监控系统处理日志的方法


Posted in Python onMarch 08, 2018

前言

最近项目中遇到一个用于监控日志文件的Python包pyinotify,结合自己的项目经验和网上的一些资料总结一下,总的原理是利用pyinotify模块监控日志文件夹,当日志到来的情况下,触发相应的函数进行处理,处理完毕后删除日志文件的过程,下面就着重介绍下pyinotify

pyinotify

Pyinotify是一个Python模块,用来监测文件系统的变化。 Pyinotify依赖于Linux内核的功能—inotify(内核2.6.13合并)。 inotify的是一个事件驱动的通知器,其通知接口通过三个系统调用从内核空间到用户空间。pyinotify结合这些系统调用,并提供一个顶级的抽象和一个通用的方式来处理这些功能。

  1. pyinotify 说百了就是通过 调用系统的inotify来实现通知的
  2. inotify 既可以监视文件,也可以监视目录
  3. Inotify 使用系统调用而非 SIGIO 来通知文件系统事件。

Inotify 可以监视的文件系统事件包括:

Event Name Is an Event Description
IN_ACCESS Yes file was accessed.
IN_ATTRIB Yes metadata changed.
IN_CLOSE_NOWRITE Yes unwrittable file was closed.
IN_CLOSE_WRITE Yes writtable file was closed.
IN_CREATE Yes file/dir was created in watched directory.
IN_DELETE Yes file/dir was deleted in watched directory.
IN_DELETE_SELF Yes 自删除,即一个可执行文件在执行时删除自己
IN_DONT_FOLLOW No don't follow a symlink (lk 2.6.15).
IN_IGNORED Yes raised on watched item removing. Probably useless for you, prefer instead IN_DELETE*.
IN_ISDIR No event occurred against directory. It is always piggybacked to an event. The Event structure automatically provide this information (via .is_dir)
IN_MASK_ADD No to update a mask without overwriting the previous value (lk 2.6.14). Useful when updating a watch.
IN_MODIFY Yes file was modified.
IN_MOVE_SELF Yes 自移动,即一个可执行文件在执行时移动自己
IN_MOVED_FROM Yes file/dir in a watched dir was moved from X. Can trace the full move of an item when IN_MOVED_TO is available too, in this case if the moved item is itself watched, its path will be updated (see IN_MOVE_SELF).
IN_MOVED_TO Yes file/dir was moved to Y in a watched dir (see IN_MOVE_FROM).
IN_ONLYDIR No only watch the path if it is a directory (lk 2.6.15). Usable when calling .add_watch.
IN_OPEN Yes file was opened.
IN_Q_OVERFLOW Yes event queued overflowed. This event doesn't belongs to any particular watch.
IN_UNMOUNT Yes 宿主文件系统被 umount

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)

pyinotify使用例子

#!/usr/bin/python
# coding:utf-8
import os
from pyinotify import WatchManager, Notifier,ProcessEvent,IN_DELETE, IN_CREATE,IN_MODIFY
class EventHandler(ProcessEvent):

 """事件处理"""
 def process_IN_CREATE(self, event):
 print "Create file: %s " % os.path.join(event.path,event.name)

 def process_IN_DELETE(self, event):
 print "Delete file: %s " % os.path.join(event.path,event.name)

 def process_IN_MODIFY(self, event):
 print "Modify file: %s " % os.path.join(event.path,event.name)
 

def FSMonitor(path='.'):
 wm = WatchManager() 
 mask = IN_DELETE | IN_CREATE |IN_MODIFY
 notifier = Notifier(wm, EventHandler())
 wm.add_watch(path, mask,auto_add=True,rec=True)
 print 'now starting monitor %s'%(path)
 while True:
 try:
  notifier.process_events()
  if notifier.check_events():
  notifier.read_events()
 except KeyboardInterrupt:
  notifier.stop()
  break
if __name__ == "__main__":
 FSMonitor('/root/softpython/apk_url')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
tensorflow获取变量维度信息
Mar 10 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
python筛选出两个文件中重复行的方法
May 31 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
python重试装饰器的简单实现方法
Jan 31 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 Python
matplotlib grid()设置网格线外观的实现
Feb 22 Python
Django与数据库交互的实现
Jun 03 Python
TensorFlow模型保存和提取的方法
Mar 08 #Python
火车票抢票python代码公开揭秘!
Mar 08 #Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 #Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 #Python
TensorFlow模型保存/载入的两种方法
Mar 08 #Python
python2.7 json 转换日期的处理的示例
Mar 07 #Python
教你用Python创建微信聊天机器人
Mar 31 #Python
You might like
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php获取远程文件内容的函数
2015/11/02 PHP
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
儿童python练习实例
2018/05/27 Python
python pytest进阶之fixture详解
2019/06/27 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
python相对企业语言优势在哪
2020/06/12 Python
Python装饰器结合递归原理解析
2020/07/02 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
园长自我鉴定
2013/10/06 职场文书
财务会计毕业生自荐信
2013/11/02 职场文书
安全检查验收制度
2014/01/12 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
教师党员自我评价2015
2015/03/04 职场文书
php解析非标准json、非规范json的方式实例
2022/05/10 PHP