学习笔记:python watchdog运维监控文件系统事件实战

简介: 相见恨晚的watchdog库,运维监视文件系统神器。

情况介绍
由于公司准备做Jenkins的前端自动化发布,但是前端的Node.js环境不统一,所以暂时先搁置,采用Ftp上传文件更新项目,因此想到了可以采用文件监控的形式来进行自动化上传。Python语言的优越性就体现出来了,其中有很多很棒的库,本篇即将用到的就是watchdog库。

watchdog库介绍
watchdog用来监控指定目录文件的变化,例如添加删除文件或目录,修改文件内容、重命名文件或目录等,每种变化都会产生一个事件,且有一个特定的事件类与之对应,然后再通过事件处理类来处理对应的事件,至于怎么样处理事件完全可以自定义,只需继承事件处理类的基类并重写对应实例方法。

75c6590de715795c7c69185c50cec9282ca12fc6

实战准备
1.Python环境(系统自带Python2.7.5)
2.安装watchdog库(pip install watchdog)

实例演示

#!/usr/bin/python
# -*- coding:UTF-8 -*-
import time
from watchdog.observers import Observer
from watchdog.events import RegexMatchingEventHandler
import commands
class MyHandler(RegexMatchingEventHandler):

def __init__(self, regex_list=[r”.*”]):
super(MyHandler, self).__init__(regex_list)

def on_created(self, event):
if event.is_directory:
pass
else:
print(event.event_type, event.src_path)

def on_deleted(self, event):
if event.is_directory:
pass
else:
print(event.event_type, event.src_path)

def on_modified(self, event):
if event.is_directory:
pass
else:
print(event.event_type, event.src_path)
node = event.src_path.split(‘/’,3)[2]
if node == “cp”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_cp.yml’)
elif node == “genpindao”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_genpindao.yml’)
elif node == “login”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_login.yml’)
elif node == “ucenter”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_ucenter.yml’)
else:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node.yml -e node=’+node)
def on_moved(self, event):
print(“move”, event.src_path, event.dest_path)

if __name__ == “__main__”:
reges = [r”.*\.c”, r”.*\.h”, r”.*\.cpp”]
event_handler = MyHandler(reges)
observer = Observer()
observer.schedule(event_handler, “/node_ftp/”, recursive=True)
observer.start()

try:
while True:
time.sleep(2)
except KeyboardInterrupt:
observer.stop()
observer.join()

实例分析
watchdog主要采用观察者模型。主要有三个角色:observer,event_handler,被监控的文件夹。三者原本是独立的,主要通过observer.schedule函数将三者串起来,意思为observer不断检测调用平台依赖代码对监控文件夹进行变动检测,当发现改变时,通知event_handler处理。
关键点:
1.on_modified方法,是文件有变化触发的函数,上传Ftp目录后就需要调用此方法。
2.event是获取具体文件的路径,文中是为了获取具体的项目名称而进行的目录处理。
3.commands.getstatusoutput方法是调用系统的Shell命令。
4.observer.schedule方法第二个参数就是监控的具体的目录。

Tips:最后可以推荐读者有时间可以阅读一下watchdog的源码,写的清晰易懂而且架构很好。

相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
297 7
|
2月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
2月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
304 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
2月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
2月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
2月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
107 12
|
2月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
283 1
|
2月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
486 1
|
2月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
257 0

热门文章

最新文章

推荐镜像

更多