files_backup.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-import hashlib,shutil,time,json,os
from config import *
NowTime=time.strftime("%Y%m%d%H%M%S", time.localtime())
def getConfig():
Dump_json=json.dumps(Service_conf_json)
Dump_json=eval(Dump_json)
return Dump_json
class File_path_info(object):
def __init__(self,Service_name):
self.Service_name=Service_name
def getFileinfo(self):
self.file_info=getConfig()[self.Service_name]
self.file_info=self.file_info[0]
return self.file_info
def getFilebase(self):
self.file_base=self.getFileinfo()['FileBase']+'/'
return self.file_base
def getFilename(self):
self.file_name=self.getFileinfo()['FileName']
return self.file_name
def getFilepath(self):
self.file_path=self.getFilebase()+self.getFilename()
return self.file_path
def getBackupdir(self):
if self.getFileinfo()['BakDir']+'/'+self.Service_name+'/' != Backup_Dir+'/'+self.Service_name+'/':
if os.path.exists(self.getFileinfo()['BakDir']+'/'+self.Service_name+'/') == False:
os.makedirs(self.getFileinfo()['BakDir']+'/'+self.Service_name+'/')
self.backup_dir=self.getFileinfo()['BakDir']+'/'+self.Service_name+'/'
return self.backup_dir
else:
self.backup_dir=self.getFileinfo()['BakDir']+'/'+self.Service_name+'/'
return self.backup_dir
else:
if os.path.exists(Backup_Dir+'/'+self.Service_name+'/') == False:
os.makedirs(Backup_Dir+‘/’+self.Service_name+'/')
self.backup_dir=Backup_Dir+'/'+self.Service_name+'/'
return self.backup_dir
else:
self.backup_dir=Backup_Dir+'/'+self.Service_name+'/'
return self.backup_dir
def getBackupfile(self):
self.backup_file=os.listdir(self.getBackupdir())
self.backup_file.sort(key=lambda fn: os.path.getmtime(self.getBackupdir()+fn))
if self.backup_file == []:
return
else:
return self.backup_file[-1]
def getBackuppath(self):
if self.getBackupfile() == None:
shutil.copyfile(self.getFilepath(),self.getBackupdir()+'/'+self.getFilename()+'.'+NowTime)
self.backup_path=self.getBackupdir()+self.getBackupfile()
return self.backup_path
else:
self.backup_path=self.getBackupdir()+self.getBackupfile()
return self.backup_path
def getSrcmd5(Service_name):
srcfile_path=open(InfoInstance(Service_name).getFilepath(),'rb')
src_md5ck=hashlib.md5()
while True:
srcfile_readl=srcfile_path.read(8192)
if not srcfile_readl:
break
src_md5ck.update(srcfile_readl)
srcfile_path.close()
return src_md5ck.hexdigest()
def getBakmd5(Service_name):
bakfile_path=open(InfoInstance(Service_name).getBackuppath(),'rb')
bak_md5ck=hashlib.md5()
while True:
bakfile_readl=bakfile_path.read(8192)
if not bakfile_readl:
break
bak_md5ck.update(bakfile_readl)
bakfile_path.close()
return bak_md5ck.hexdigest()
def InfoInstance(Service_name):
FileInfo=File_path_info(Service_name)
return FileInfo
def getFileslist():
Files_list=getConfig().keys()
return Files_list
def runConfBackup():
for Service_name in getFileslist():
if os.path.exists(InfoInstance(Service_name).getFilepath()) == True:
if getSrcmd5(Service_name) != getBakmd5(Service_name):
shutil.copyfile(InfoInstance(Service_name).getFilepath(),InfoInstance(Service_name).getBackupdir()+'/'+InfoInstance(Service_name).getFilename()+'.'+NowTime)
print '---------------------------'
print 'Service Name:'+Service_name
print 'Backup Path:'+InfoInstance(Service_name).getBackuppath()
else:
print 'src file not exist!! '+Service_name+' '+InfoInstance(Service_name).getFilepath()
if __name__ == '__main__':
runConfBackup()
config.py
##default backup directory##
Backup_Dir='/tmp/conf_bak'
##
Service_conf_json={
'myself_config': [
{
'FileBase': '/opt/My_project/conf_bak',
'FileName': 'config.py',
'BakDir': Backup_Dir
}
],
'profile': [
{
'FileBase': '/etc',
'FileName': 'profile',
'BakDir': Backup_Dir
}
],
'fstab': [
{
'FileBase': '/etc',
'FileName': 'fstab',
'BakDir': Backup_Dir
}
],
'hosts': [
{
'FileBase': '/etc',
'FileName': 'hosts',
'BakDir': Backup_Dir
}
]
}