python 根据网站配置文件进行相关备份

#!/usr/bin/env python
import urllib2,os,datetime,subprocess,sys,glob,re,ConfigParser,getopt
#cmd [$path] | <make|bak>
#luohongjiang
#qq:123769752
#[email protected]
#version 2.0
#2012/11/28
###################
def recover():
	#vail_day=7
	logfile_path="/var/update/bakfile"
	logfile_format="bakweb+"   
	today=datetime.date.today()
	old_day=datetime.timedelta(days=7)
	file_date=today-old_day
	files=glob.glob("/var/update/bakfile"+logfile_format+"*"+str(file_date)+"*") #take file
	for file in files:
		subprocess.os.remove(file)
	####
	
	
################################
def calc(path):
	filter={'filter':'--exclude "*.jpg" --exclude "*.tar" --exclude "*.sql" --exclude "*.SQL" --exclude "*.gz"  --exclude "*.exe" --exclude "*.gif"  --exclude "*.log" --exclude "*.png"  --exclude "*.apk" --exclude "*.rar" --exclude "*.zip"'}
	i=0 #server_name
	j=0 #root
	ser_root={}
	ser_name={}
	tjroot=re.compile("[\s]+root[\s]+\/")
	tjserv=re.compile("[\s]+server_name[\s]+[\w]+")
	filename=subprocess.os.popen("find "+path+" -name '*.conf'")
	for file in filename.read().split("\n"):
		if subprocess.os.path.exists(file):
			fd=open(file,'r')
			body=fd.read().split("\n")
			for tj in body:
				if '#' not in tj:            #Starting with # are ignored
					if "server_name" in tj:  #Find this line if there is 'server_name'
						if i==j:
							if tjserv.findall(tj): #if this line have server_name rule so use re compare
								i=i+1
								ser_name[i]=tj.strip()  #tj line data add ser_name
						elif i>j:
							if tjserv.findall(tj):
								ser_name[i-1]=tj.strip()
					if "root" in tj:
						if i-j==1:
							if tjroot.findall(tj):
								j=j+1
								ser_root[j]=tj.strip()
						elif j==i:
							if tjroot.findall(tj): 
								ser_root[j-1]=tj.strip()
	if subprocess.os.path.exists("/var/log/baksit.conf"):
		subprocess.os.remove("/var/log/baksit.conf")
	fd=open("/var/log/baksit.conf","w+")
	for key in ser_root.keys():
		for name in re.split(r"\s+|;",ser_name[key])[1:2]:
			fd.writelines("["+str(name)+"]"+"\n")
			fd.writelines("name="+str(name)+"\n")
		for root in re.split(r"\s+|;",ser_root[key])[1:2]:
			fd.writelines("path="+str(root)+"\n")
			fd.writelines("filter="+str(filter['filter'])+"\n")
	fd.flush()
	fd.close()

###############bak file
def baksitfile():
	sitfile=ConfigParser.ConfigParser()
	sitfile.read("/var/log/baksit.conf")
	node=sitfile.sections()
	for inode in node:
		name=sitfile.get(inode,"name")
		path=sitfile.get(inode,"path")
		filter=sitfile.get(inode,"filter")
		bfdate=str(datetime.date.today())
		subprocess.call('tar %s -cvjf /var/update/bakfile/bakweb+%s%s.tar.gz %s'%(filter,name,bfdate,path),shell=True)

##################main
def main(path,action):
	recover()
	if path =="NULL":
		if subprocess.os.path.exists("/usr/local/nginx/conf"):
			ngpath="/usr/local/nginx/conf"
		elif subprocess.os.path.exists("/opt/www/nginx/conf"):
			ngpath="/opt/www/nginx/conf"
	else:
		ngpath=str(path)
	if action == "bak":
		baksitfile()
		subprocess.sys.exit()
	elif action == "make":
		calc(ngpath)
###########################
def menu():
	path="NULL"
	action="NULL"
	opts,args=getopt.getopt(sys.argv[1:],"hrbmp:",["bak","make","path="])
	for opt,arg in opts:
		if opt in ("-h","--help"):
			print '''<[-b][-m]> <-p nginx config file path>
	-b is bakfile
	-r is recover file
	-m is make config file
	-p is find nginx config file'''
		elif opt in ("-r","--recover"):
			recover()
		elif opt in ("-b","--bak"):
			action="bak"
		elif opt in ("-m","--make"):
			action="make"
		elif opt in ("-p","--path"):
			path=arg
	if path == "NULL" and action=="NULL":
		subprocess.sys.exit()
	else:
		main(path,action)

你可能感兴趣的:(nginx,python)