溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

系統(tǒng)配置文件備份比較

發(fā)布時(shí)間:2020-06-16 13:39:03 來(lái)源:網(wǎng)絡(luò) 閱讀:466 作者:l1141041 欄目:開發(fā)技術(shù)
客戶的系統(tǒng)出各種問題,這次出了問題整整一天都沒找出原因,都紅臉了,最后發(fā)現(xiàn)是系統(tǒng)配置文件被改掉了,簡(jiǎn)直不能忍,所以寫了這個(gè)腳本,放到定時(shí)任務(wù)里面,每天備份比較配置文件

import difflib
import os
import time
import shutil
from AFALogger import LoggerError,LoggerInfor
from traceback import format_exc;
def compareFile(file1,file2):
#比較兩個(gè)文件的內(nèi)容是否相同
    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:
                    continue
        return diffInfo
    except:
        LoggerInfor(str(file2+'\nerror')) #將錯(cuò)誤的文件寫入日志,當(dāng)文件名亂碼的時(shí)候會(huì)出現(xiàn)錯(cuò)誤
        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):
#在輸入為目錄的時(shí)候,獲取目錄下所有文件
    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:
            continue
    return 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參數(shù)必須為str類型", [None]];
        if not type(destinationDir) is str:
            return [0, "ERR001", "destinationDir參數(shù)必須為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('.'):
                continue
            filepath='_'.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:
                continue
        return [1, None, None, [None]];
    except Exception, e:
        LoggerError(str(format_exc()));
        return [2, 'A015017', '異常:'+str( e ), [None]];
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI