# coding:utf-8 import configparser import logging import os import psutil import ctypes import platform import schedule import time # 配置日志 def configLog(): logging.basicConfig(level=logging.INFO, # 控制台打印的日志级别 filename='monitor.log', filemode='a', ##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志 # a是追加模式,默认如果不写的话,就是追加模式 format= '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s' # 日志格式 ) # 初始化配置参数 def init(): configLog() cf = configparser.ConfigParser() cf.read("config.ini","UTF-8") secs = cf.sections() print(cf.get("backupFiles","valve")) # 备份文件监控任务 def backupFilesMonitorJob(dir,files): for x in files: if not os.path.exists(dir+x): print("日常备份文件%s%s还未备份"%(dir,x)) # 核心文件监控任务 def coreFilesMonitorJob(dir,files): for x in files: if not os.path.exists(dir+x): print("core文件%s%s还未备份"%(dir,x)) # 数据库备份文件监控任务 def databaseBackupMonitorJob(dir,files): for x in files: if not os.path.exists(dir+x): print("core文件%s%s还未备份"%(dir,x)) # 进程监控任务 def processMonitorJob(processNames): for x in processNames: for p in psutil.process_iter(): if p.name() == x: print("进程状态",p.name) break; # 磁盘监控任务 def diskCapacityMonitorJob(folder): freeSpace = 0 if platform.system() == 'Windows': free_bytes = ctypes.c_ulonglong(0) ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(folder), None, None, ctypes.pointer(free_bytes)) freeSpace = free_bytes.value/1024/1024/1024 else: st = os.statvfs(folder) freeSpace = st.f_bavail * st.f_frsize/1024/1024 # print(freeSpace,"GB") if freeSpace <= 50: print("警告,磁盘空间不足50GB,当前仅剩%i GB,[当前时间:%s]"%(freeSpace,time.strftime('%Y.%m.%d %H:%M:%S',time.localtime(time.time())))) schedule.every(3).seconds.do(processMonitorJob,processNames = ['QQ.exe','chrome.exe']) schedule.every(10).seconds.do(diskCapacityMonitorJob,"C:\") schedule.every(10).seconds.do(backupFilesMonitorJob,"C:\",["demo.txt","demo2.txt"]) schedule.every(10).seconds.do(coreFilesMonitorJob,"C:\",["demoa.txt","demob.txt"]) schedule.every(10).seconds.do(databaseBackupMonitorJob,"C:\",["data1.txt","data2.txt"]) if __name__ == "__main__": while True: schedule.run_pending()