客户的系统出各种问题,这次出了问题整整一天都没找出原因,都红脸了,最后发现是系统配置文件被改掉了,简直不能忍,所以写了这个脚本,放到定时任务里面,每天备份比较配置文件import difflib
import os
import time
import shutil
from AFALogger import LoggerError,LoggerInfor
from traceback import format_exc;
def compareFile(file1,file2):
#比较两个文件的内容是否相同try:file_handle_1 = open(file1)    file_handle_1_read = file_handle_1.readlines()file_handle_1.close()
#        LoggerInfor(str(file_handle_1_read))file_handle_2 = open(file2)file_handle_2_read = file_handle_2.readlines()file_handle_2.close()#       LoggerInfor(str(file_handle_2_read))diff = ''.join(difflib.ndiff(file_handle_1_read,file_handle_2_read))diffInfo=[]for line in diff.split('\n'):if line !='':if line[0] in ('+','-'):diffInfo.append(line)else:continuereturn diffInfoexcept:LoggerInfor(str(file2+'\nerror')) #将错误的文件写入日志,当文件名乱码的时候会出现错误return [file2+'\nerror',]
def compareResultWriteFile(file2,diffInfo,resultFilename):
#将不同的地方写入文件file_handle = open(resultFilename,'a')file_handle.write(file2+'  Start\n')for line in diffInfo:file_handle.write(line+'\n')file_handle.write(file2+'  END\n\n')file_handle.close()
def getAllFilename(directoryOrFilename):
#在输入为目录的时候,获取目录下所有文件allFilename=[]for name in directoryOrFilename.split(','):if os.path.isdir(name):for path,dirs,files in os.walk(name):for fn in files:allFilename.append(path+'/'+fn)elif os.path.isfile(name):allFilename.append(name)else:continuereturn allFilename
def backupFile(resultDir,filename):
#将本日文件备份try:filepath_list=filename.split('/')filepath='_'.join(filepath_list[3:-1])shutil.copy(filename,resultDir+'/'+filepath_list[-1]+'_'+filepath)except:return ''
def cfgCompare(sourceFile,destinationDir):'''  @使用范例:cfgCompare('/home/iqms/lyb,/home/iqms/qm_info','/home/iqms/cfgDir')'''try:if not type(sourceFile) is str:return [0, "ERR001", "sourceFile参数必须为str类型", [None]];if not type(destinationDir) is str:return [0, "ERR001", "destinationDir参数必须为str类型", [None]];allFilename = getAllFilename(sourceFile)yesterdayDestinationDir = destinationDir+'/'+time.strftime('%Y%m%d',time.localtime(time.time()-24*60*60))destinationDir = destinationDir+'/'+time.strftime('%Y%m%d')os.mkdir(destinationDir)for filename in allFilename:filepath_list=filename.split('/') #拼文件名if filepath_list[-1].startswith('.'):continuefilepath='_'.join(filepath_list[3:-1]) #拼文件名backupFile(destinationDir,filename)if os.path.exists(yesterdayDestinationDir):
#                diffInfo=compareFile(yesterdayDestinationDir+'/'+filename.split('/')[-1],filename)
#                diffInfo=compareFile(yesterdayDestinationDir+'/'+filename.split('/')[-1],destinationDir+'/'+filename.split('/')[-1])diffInfo=compareFile(yesterdayDestinationDir+'/'+filepath_list[-1]+'_'+filepath,destinationDir+'/'+filepath_list[-1]+'_'+filepath)compareResultWriteFile(filename.split('/')[-1],diffInfo,destinationDir+'/log')else:continuereturn [1, None, None, [None]];except Exception, e:LoggerError(str(format_exc()));return [2, 'A015017', '异常:'+str( e ), [None]];

转载于:https://blog.51cto.com/8588103/1732047

系统配置文件备份比较相关推荐

  1. linux 加固检测脚本,Linux系统检测和防护脚本

    1.方便将服务器安全情况通过检测脚本直接输出txt文件,同时便于检查出安全隐患. 2.缩短安全检查和防护时间,提高安全检查和防护效率 github地址 https://github.com/xiaoy ...

  2. 织梦cms java_织梦CMS文件夹目录解释(完整版)

    include/:里面包含了系统运行所需要的类库文件 data/: admin:网站后台管理的一些必要配置 backupdata:默认的系统数据库备份目录 cache :缓存目录(这个缓存是栏目缓存等 ...

  3. 华为,H3C,RG交换机堆叠与群集总结

    A-1华为堆叠 iStack,全称Intelligent Stack,智能堆叠,适用于S2700.S3700.S5700和S6700中低端交换机. 根据连接介质的不同堆叠方式可以分为:堆叠卡堆叠和业务 ...

  4. RTX30系列-Ubuntu系统配置与深度学习环境Pytorch配置

    本文完成RTX3090Windows+Ubuntu双系统配置 ,并配置深度学习环境 硬件环境为RTX3090+Z590主板,64GB RAM,2TB固态,8TB存储 Ubuntu系统版本为:Ubunt ...

  5. 更换内存条、固态硬盘、双系统配置全纪录

    联想IdeaPad 310S更换内存条.固态硬盘.双系统配置全纪录 一.更换内存条 二.更换固态 三.重装windows10系统 1.准备工作 2.注意事项 3.制作启动盘 四.加装ubuntu16. ...

  6. XP系统配置使运行程序速度加快

    以下方法不一定都适合你,根据自己的机子进行选择性优化,相信效果一定会让你满意.本人主要是对注册表的键值优化了一下,效果相当不错.愿与大家分享:   Windows XP已经成为目前的主流操作系统,但它 ...

  7. Linux系统配置VI或VIM的技巧

    Linux系统配置VI或VIM的技巧 作者:IT专家网论坛出处:IT专家网论坛2008-10-28 11:08 配置VI和VIM的颜色显示,使它能够高亮度显示一些特别的单词,这对编写程序很有用⋯⋯ 1 ...

  8. OpenStack环境搭建(五:附加项虚拟机文件备份使用)

    实验要求: 完成Virtual box平台安装,会应用相关操作: 在virtual box虚拟平台上部署Fuel Master节点: 在virtual box虚拟平台上部署计算节点Computer: ...

  9. 数据库备份到文件服务器,数据库文件备份到云服务器上

    数据库文件备份到云服务器上 内容精选 换一换 目前数据库服务器备份Agent安装包需要提交工单进行获取.当前仅支持x86计算类型的服务器,暂不支持鲲鹏计算类型的服务器.用户需要启用数据库备份前,需先在 ...

最新文章

  1. django 设置媒体url_Django设置网站地图sitemap
  2. java 打印空心菱形,用for循环打印出空心菱形程序
  3. 在大数据圈你不知道的15个新技术
  4. 怎么设置html页面背景图片大小怎么设置,HTML – 响应式网页设计:“如何根据浏览器窗口大小使用CSS调整背景图像的大小”?...
  5. Unity3D Input按键系统
  6. 拥抱开源!除了微软红帽,这些国际大厂你认识几个?
  7. RC4加密解密java算法
  8. 统计单词个数(划分型)
  9. android系统电视缺点,高清智能电视安卓系统优势与不足解析
  10. geoTools学习笔记001---(简介)
  11. 关掉云存储后噪声 海康摄像头_万物互联 海量数据如何实现更好的存储和应用...
  12. php 请求 响应,发送http响应后继续处理php
  13. 文本检测之-craft检测算法
  14. matlab实验7符号计算器,MATLAB自学笔记(二十一):符号微积分、积分变换、代数方程以及可视化...
  15. java读取dcm影像文件_DCM医学影像文件的格式与读取方法分享
  16. 微信公众号开发-----接送事件推送之关注/取消关注
  17. Android ImageView设置边框
  18. 绘制图像灰度直方图——将图像的灰度分布可视化方法总结
  19. 艾默生质量流量计2700/1700调试说明
  20. Redis: pipeline基本原理以及Jedis和Redisson的实现示例

热门文章

  1. ptam tracking
  2. 在ApacheHTTPD服务器中使用DSO完全分析
  3. PHP更新数据库记录
  4. DataGrid 的 全选/取消全选 控制(CheckBox)
  5. Asp.Net 使用 GDI+ 绘制3D饼图入门篇源码
  6. 在 Visual Basic .NET 或 JScript 代码中使用早期绑定
  7. libev源码解析——I/O模型
  8. 【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)
  9. Java项目:前台+后台精品水果商城系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
  10. java clob内存溢出_java - java.sql.SQLException:ORA-01704:字符串文字太长时插入或更新 - 堆栈内存溢出...