系统配置文件备份比较
客户的系统出各种问题,这次出了问题整整一天都没找出原因,都红脸了,最后发现是系统配置文件被改掉了,简直不能忍,所以写了这个脚本,放到定时任务里面,每天备份比较配置文件importdifflibimportosimporttimeimportshutilfromAFALoggerimportLoggerError,LoggerInforfromtracebackimportformat_exc;defcompareFile(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=[]forlineindiff.split('\n'):ifline!='':ifline[0]in('+','-'):diffInfo.append(line)else:continuereturndiffInfoexcept:LoggerInfor(str(file2+'\nerror'))#将错误的文件写入日志,当文件名乱码的时候会出现错误return[file2+'\nerror',]defcompareResultWriteFile(file2,diffInfo,resultFilename):#将不同的地方写入文件file_handle=open(resultFilename,'a')file_handle.write(file2+'Start\n')forlineindiffInfo:file_handle.write(line+'\n')file_handle.write(file2+'END\n\n')file_handle.close()defgetAllFilename(directoryOrFilename):#在输入为目录的时候,获取目录下所有文件allFilename=[]fornameindirectoryOrFilename.split(','):ifos.path.isdir(name):forpath,dirs,filesinos.walk(name):forfninfiles:allFilename.append(path+'/'+fn)elifos.path.isfile(name):allFilename.append(name)else:continuereturnallFilenamedefbackupFile(resultDir,filename):#将本日文件备份try:filepath_list=filename.split('/')filepath='_'.join(filepath_list[3:-1])shutil.copy(filename,resultDir+'/'+filepath_list[-1]+'_'+filepath)except:return''defcfgCompare(sourceFile,destinationDir):'''@使用范例:cfgCompare('/home/iqms/lyb,/home/iqms/qm_info','/home/iqms/cfgDir')'''try:ifnottype(sourceFile)isstr:return[0,"ERR001","sourceFile参数必须为str类型",[None]];ifnottype(destinationDir)isstr: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)forfilenameinallFilename:filepath_list=filename.split('/')#拼文件名iffilepath_list[-1].startswith('.'):continuefilepath='_'.join(filepath_list[3:-1])#拼文件名backupFile(destinationDir,filename)ifos.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]];exceptException,e:LoggerError(str(format_exc()));return[2,'A015017','异常:'+str(e),[None]];
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。