文档章节

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

莲花子
 莲花子
发布于 2013/07/03 23:19
字数 491
阅读 57
收藏 0
#!/usr/bin/env python
import urllib2,os,datetime,subprocess,sys,glob,re,ConfigParser,getopt
#cmd [$path] | <make|bak>

#qq:123769752
#g_linux@qq.com
#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)

 

© 著作权归作者所有

莲花子
粉丝 1
博文 13
码字总数 4521
作品 0
渝中
系统管理员
私信 提问
使用 python 管理 mysql 开发工具箱 - 1

Mysql 是一个比较优秀的开源的数据库,很多公司都在使用。作为运维人员,经常做着一些重复性的工作,比如创建数据库实例,数据库备份等,完全都可以使用 python 编写一个工具来实现。 一、模...

肖邦0526
2016/12/26
0
0
Centos的python2和3,pip2和3安装

Centos默认的是python版本一般都是2.6或者2.7。 python3的安装需要的依赖 下载python文件 解压 tar -zxvf Python-3.5.0.tgz 备份旧版本python,链接新版本python 在/usr/bin中有python、pyt...

静默加载
2018/08/08
0
0
Python实现腾讯云CDB备份文件自动上传到COS

一、背景 需求:目前遇到的客户需求为将腾讯云CDB备份文件自动上传到腾讯云COS内,再次抛砖引玉,还有很多类似的需求均可以采用此类方法解决,线下IDC数据文件备份至云端COS内,或根据文件下...

KaliArch
2018/07/16
0
0
Python实现腾讯云CDB备份文件自动上传到COS

一、背景 需求:目前遇到的客户需求为将腾讯云CDB备份文件自动上传到腾讯云COS内,再次抛砖引玉,还有很多类似的需求均可以采用此类方法解决,线下IDC数据文件备份至云端COS内,或根据文件下...

KaliArch
2018/07/16
0
0
svn版本备份-- python 脚本

svn版本备份 备份机制 1, 每10分钟检查一次svn(时间可以在配置文件中配置)。 2,检查到有更新时备份最新版本,记录更新内容。 3,删除30天之前的备份(天数可以配置)。 配置文件 # vi ../...

磁针石
2014/04/09
959
0

没有更多内容

加载失败,请刷新页面

加载更多

检查字符串是否不为空且不为空

如何检查字符串是否不为null也不为空? public void doStuff(String str){ if (str != null && str != "**here I want to check the 'str' is empty or not**") { /* handl......

javail
8分钟前
15
0
No module named 'apscheduler.schedulers'

关于 ModuleNotFoundError: No module named 'apscheduler.schedulers' 和 ModuleNotFoundError: No module named 'apscheduler' 的问题,网上有不少解决。大多数都是因为,文件起名与模块名......

開援带碼
29分钟前
37
0
如何查看Android的系统版本?

有谁知道我怎么能检查系统版本(例如1.0 , 2.2 ,等)编程? #1楼 我无法对答案发表评论,但是Kaushik的答案存在一个严重错误:SDK_INT与系统版本不同,但实际上是指API级别。 if(Build.VER...

技术盛宴
55分钟前
35
0
引入AI变量,精准农业正在加速豹变?

  不久前,“江苏省脱贫率达 99.99%,尚未脱贫人数仅剩 6 户、17 人”这样一则新闻刷屏。“把这 17 个人迁出,江苏就全省脱贫”、“最后这 6 户人家拖了后腿”,在网民们的调侃和质疑声背后...

水果黄瓜
58分钟前
41
0
Elasticsearch系列---结构化搜索

概要 结构化搜索针对日期、时间、数字等结构化数据的搜索,它们有自己的格式,我们可以对它们进行范围,比较大小等逻辑操作,这些逻辑操作得到的结果非黑即白,要么符合条件在结果集里,要么...

清茶豆奶
今天
69
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部