Python自动化运维快速入门
上QQ阅读APP看书,第一时间看更新

2.3 文件系统监控

运维工作离不开文件系统的监控,如某个目录被删除,或者某个文件被修改、移动、删除时需要执行一定的操作或发出报警。当然,读者可能会想到使用循环检查文件或目录的信息来满足上述需求,也不是不可以,但这不是一个最好的方案,一是因为循环操作会不停地执行指令太耗CPU,二是不够实时,循环操作中会放一些等待指令,如time.sleep(3)来减少CPU的消耗,这就会导致监控的时机有一定的滞后,不够实时。本节介绍一个第三方库watchdog来实现文件系统监控,其原理是通过操作系统的事件触发的,不需要循环,也不需要等待。

提示

文件系统空间不足的监控请参考上节系统信息监控中磁盘监控的部分。


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

运行结果如下:

监控目录 d:\test
2018-06-05 22:28:52 文件夹 d:\test\dir0 创建
2018-06-05 22:29:03 文件 d:\test\file1.txt 创建
2018-06-05 22:29:03 文件 d:\test\file1.txt 修改
2018-06-05 22:29:14 文件夹由 d:\test\dir0 移动至 d:\test\dir3
2018-06-05 22:29:25 文件由 d:\test\file1.txt 移动至 d:\test\file2.txt
2018-06-05 22:29:29 文件 d:\test\file2.txt 删除

运维中以下场景十分适合使用watchdog。

(1)监控文件系统中文件或目录的增、删、改情况
(2)当特定的文件被创建、删除、修改、移动时执行相应的任务

第二个场景在后续的小节中会有具体的应用。