日志格式
app-2019-07-24.log
app-2019-07-24.1.log
该脚本适合一天之内有多个日志文件
# /usr/bin/python #-*- coding: utf-8 -*- # Description 日志压缩 import os import datetime import re import tarfile #获取前几天的日期 def getdate(before_day): today = datetime.datetime.now() # 计算偏移量 offset = datetime.timedelta(days=-before_day) # 获取想要的日期的时间 re_date = (today + offset).strftime('%Y-%m-%d') return re_date # 获取文件路径集合,不包含子目录 def getFile(logsPath): logs_file = [] file_list = os.listdir(logsPath) for file_name in file_list: path = os.path.join(logsPath, file_name) if os.path.isdir(path): continue logs_file.append(path) return logs_file # 检查文件,并压缩 def tar_file(logs_file,i): new_date = datetime.datetime.now().strftime('%Y-%m-%d') # 当前时间 logs_old=[] for f in logs_file: # 过滤掉压缩文件 if f.endswith(".tar.gz"): continue # 使用正则获取日志文件名的时间 mat = re.search(r"(d{4}-d{1,2}-d{1,2})", f) if bool(mat): delta = datetime.datetime.strptime(new_date, '%Y-%m-%d') - datetime.datetime.strptime(mat.group() ,'%Y-%m-%d') if delta.days == i: f=re.split("/", f)[-1] logs_old.append(f) old_date = getdate(i) if len(logs_old) == 0: return filename = re.split("-", logs_old[0])[0] filename = re.split("/", filename)[-1] tar_file_name = filename + "-" + old_date + ".tar.gz" #print(tar_file_name) if os.path.exists(tar_file_name): print(tar_file_name,"is exists") return tar = tarfile.open(tar_file_name, "w:gz") for i in logs_old: tar.add(i) os.remove(i) tar.close if __name__ == "__main__": logsPath = "/opt/" os.chdir(logsPath) logs_file = getFile(logsPath) for i in range(1, 4): tar_file(logs_file, i)
设置为定时任务
这是我的脚本路径(/opt/script/tar_logs.py)
0 5 * * * /usr/bin/python /opt/script/tar_logs.py