学习笔记: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的源码,写的清晰易懂而且架构很好。

相关文章
|
16天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
16天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
41 10
|
28天前
|
算法 Unix 数据库
Python编程入门:从基础到实战
本篇文章将带你进入Python编程的奇妙世界。我们将从最基础的概念开始,逐步深入,最后通过一个实际的项目案例,让你真正体验到Python编程的乐趣和实用性。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。让我们一起探索Python的世界吧!
|
29天前
|
并行计算 调度 开发者
探索Python中的异步编程:从基础到实战
在Python的世界里,异步编程是一种让程序运行更加高效、响应更快的技术。本文不仅会介绍异步编程的基本概念和原理,还将通过具体代码示例展示如何在Python中实现异步操作。无论你是初学者还是有经验的开发者,都能从中获益,了解如何运用这一技术优化你的项目。
|
29天前
|
数据处理 Python
探索Python中的异步编程:从基础到实战
在Python的世界中,“速度”不仅是赛车手的追求。本文将带你领略Python异步编程的魅力,从原理到实践,我们不单单是看代码,更通过实例感受它的威力。你将学会如何用更少的服务器资源做更多的事,就像是在厨房里同时烹饪多道菜而不让任何一道烧焦。准备好了吗?让我们开始这场技术烹饪之旅。
|
1月前
|
运维 监控 应用服务中间件
自动化运维的利器:Ansible实战应用
【10月更文挑战第41天】在现代IT运维领域,自动化已成为提高效率、减少错误的关键。Ansible作为一种简单而强大的自动化工具,正被越来越多的企业采纳。本文将通过实际案例,展示如何使用Ansible简化日常运维任务,包括配置管理和批量部署等,旨在为读者提供一种清晰、易懂的自动化解决方案。
27 1
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
57 4
|
1月前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
39 0
下一篇
DataWorks