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文件写入实例分析
Apr 08 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
Python图算法实例分析
Aug 13 Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
pytorch标签转onehot形式实例
Jan 02 Python
python对文件的操作方法汇总
Feb 28 Python
python 实时调取摄像头的示例代码
Nov 25 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 Python
详解Django中 render() 函数的使用方法
Apr 22 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
PHP 加密解密内部算法
2010/04/22 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
js获取单选按钮的数据
2006/11/27 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
python通过zabbix api获取主机
2018/09/17 Python
python求最大值最小值方法总结
2019/06/25 Python
python虚拟环境完美部署教程
2019/08/06 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
玲玲的画教学反思
2014/02/04 职场文书
如何写好建议书
2014/03/13 职场文书
竞争上岗实施方案
2014/03/21 职场文书
个人委托书范本
2014/09/13 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
安全保证书
2015/01/16 职场文书
门店店长岗位职责
2015/04/14 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL