linux日志清理脚本(python)

一个简单的脚本实现按空间和时间来删除日志:


代码如下:

#!/usr/bin/python
import os,optparse,re,time,datetime
################################################ Defined variable
file_object=open('/tmp/clean.log','a')
today=datetime.date.today()
nowtime=time.asctime(time.localtime(time.time()))

################################################ Defined function
def operate(filename=None,directory=None,time=None,size=None):
	print("---Start program")
        if options.name:
                if '*' in options.name:
                        filename=re.sub(r'\*','',options.name)
        if options.days:
                time=int(options.days)
                opertime=today - datetime.timedelta(days=time)
                print ("Note:Opertime is %s" %(opertime))
        if options.size:
                print ("Note:Operszie bigger than %sMB"%options.size)
                options.size=int(options.size)

	def delete():
		os.system("rm %s/%s" % (A,filenamelist2))
		print("%s delete %s/%s done" % (nowtime,A,filenamelist2))
		file_object.write("%s delete %s/%s Done\n" % (nowtime,A,filenamelist2))
	def compress():
		gz=".gz"
		if not filenamelist2.endswith(gz):
			os.system("gzip %s/%s" % (A,filenamelist2))
			print("%s compress %s/%s done" % (nowtime,A,filenamelist2))
			file_object.write("%s compress  %s/%s Done\n" % (nowtime,A,filenamelist2))
	def clear():
		os.system("echo "" > %s/%s" % (A,filenamelist2))
 	        print("%s clear %s/%s done" % (nowtime,A,filenamelist2))
		file_object.write("%s clear  %s/%s Done\n" % (nowtime,A,filenamelist2))
	def judge():
		if options.oper=='delete':
			delete()
		elif options.oper=='compress':
			compress()
		elif options.oper=='clear':
			clear()
		else:
			print "Invalid parameter for --operation"
		
	for A,B,filenamelist in os.walk('%s' %directory):
		for filenamelist2 in filenamelist:
			if filename in filenamelist2:
				if time != None and size == None:
					filetime=(datetime.datetime.fromtimestamp(os.path.getmtime("%s/%s"%(A,filenamelist2)))).strftime('%Y-%m-%d')
					if str(filetime) < str(opertime):
						judge()
				elif time == None and size != None:
					filesize=os.path.getsize("%s/%s"%(A,filenamelist2))/float(1024*1024)
					if int(filesize) > int(size):
						judge()
				elif time != None and size != None:
					filetime=(datetime.datetime.fromtimestamp(os.path.getmtime("%s/%s"%(A,filenamelist2)))).strftime('%Y-%m-%d')
					filesize=os.path.getsize("%s/%s"%(A,filenamelist2))/float(1024*1024)
					if str(filetime) < str(opertime) and int(filesize) > int(size):
						judge()
				else:
						judge()
	

	file_object.close()
	print("---Quit program")


################################################## Main program
if __name__ == "__main__":
	print "---------------------------------------------------------"
	print "Standard Log Cleaning Program by Bowen"
	print "---------------------------------------------------------"
	parser=optparse.OptionParser()
	parser.add_option("-o","--operation",dest="oper",default="default",help="Choose operation [delete|compress|clear]-(Must)       --operation delete:like rm file                   --operation compress:like gzip file                     --operation clear:like : > file")
	parser.add_option("-f","--filename",dest="name",default="default",help="Specify operating filename-(Must)")
	parser.add_option("-d","--directory",dest="dire",default="default",help="Specify operating directory-(Must)")
	parser.add_option("-t","--days",dest="days",help="Operate file at  specified days ago-(May)                  eg:--days=2 is two days ago")
	parser.add_option("-s","--size",dest="size",help="Operate file bigger than specified MB-(May)                eg:--size=2 is two MB")
	options,_=parser.parse_args()
##################### Call 	
	if options.oper != 'default' and options.dire != 'default' and options.name != 'default':
		operate(options.name,options.dire,options.days,options.size)
	else:
		parser.print_help()
	


猜你喜欢

转载自blog.csdn.net/u013181216/article/details/80736522