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中使用NLTK库实现对词干的提取的教程
Apr 08 Python
Python 正则表达式的高级用法
Dec 04 Python
Python实现的购物车功能示例
Feb 11 Python
基于python log取对数详解
Jun 08 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
pycham查看程序执行的时间方法
Nov 29 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
Django如何继承AbstractUser扩展字段
Nov 27 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
用PHP函数解决SQL injection
2006/12/09 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
vue组件与复用详解
2018/04/08 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
详解Vue之事件处理
2020/07/10 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
如何用Python徒手写线性回归
2021/01/25 Python
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
销售心得体会
2014/01/02 职场文书
敬老院标语
2014/06/27 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
春晚观后感
2015/06/11 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
公司老总年会致辞
2015/07/30 职场文书
离职告别感言
2015/08/04 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书