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的Django框架中创建语言文件
Jul 27 Python
python urllib urlopen()对象方法/代理的补充说明
Jun 29 Python
Python reduce()函数的用法小结
Nov 15 Python
K-近邻算法的python实现代码分享
Dec 09 Python
Python 变量类型详解
Oct 10 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
python如何判断IP地址合法性
Apr 05 Python
python简单利用字典破解zip文件口令
Sep 07 Python
Python高并发和多线程有什么关系
Nov 14 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 Python
python 窃取摄像头照片的实现示例
Jan 08 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
基于mysql的论坛(4)
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
PHP Google的translate API代码
2008/12/10 PHP
PHP安全防范技巧分享
2011/11/03 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP 微信支付类 demo
2015/11/30 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
深入理解ES6中let和闭包
2018/02/22 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
Python中几个比较常见的名词解释
2015/07/04 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
大学生实习思想汇报
2014/01/12 职场文书
优秀员工评语
2014/02/10 职场文书
室内拓展活动方案
2014/02/13 职场文书
大学生工作求职信
2014/06/23 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
初三英语教学反思
2016/02/15 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers
Hive常用日期格式转换语法
2022/06/25 数据库