python 打包前三天日志

日志格式

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

参考  https://www.jianshu.com/p/e79ec1ce39d8

猜你喜欢

转载自www.cnblogs.com/xmc2017/p/11232088.html
今日推荐