• 清除过期日志的py脚本


    本篇和大家分享的是一个清除过期日志的python脚本,年后第二篇希望对大家有帮助;

    • 该python脚本创建的由来
    • 代码及分析
    • crontab定时任务

    该python脚本创建的由来

    此由来,是在过年假期时突然被反馈告警服务器磁盘空间占用比例增大,当时通过df等命令定位到,是使用了某个开源任务调度框架日志增大并之前很多历史日志没有自动删除导致的;

    因此,查看该框架的文档是否有自动清除配置,暂时没有找到自动清除日志的配置说明,于是乎浏览源码就是log4来记录的,本来打算扩展重写下log4让其具有自动清除日志的功能,但是想到以后可能还有其他项目的日志无法自动清除,于是乎有了本篇分享的python产出,仅仅配置下检测路径即可删除自定义n天之前的日志

    代码及分析

    先来上代码,具体如下:

     1 #!  /usr/bin/python
     2 #coding=utf-8
     3 import os
     4 import datetime
     5 import time
     6 
     7 
     8 class DoFile():
     9     # 获取某个磁盘路径里所有文件
    10     def getFiles(self, strDir, isLoop, overDay):
    11         files = []
    12         if len(strDir) <= 0 or not os.path.exists(strDir):
    13             return files
    14         dirs = os.listdir(strDir)
    15         for dir in dirs:
    16             path = os.path.join(strDir, dir)
    17             if(os.path.isfile(path) and path.find(".log") >= 0):  # 是.log文件
    18                 if(self.compareFileTime(path, -overDay)):
    19                     files.append(path)
    20             elif(os.path.isdir(path) and isLoop):  # 是磁盘
    21                files.extend(self.getFiles(path, isLoop, overDay))
    22             else:
    23                 continue
    24         return files
    25 
    26     # 综合处理磁盘文件
    27     def doFiles(self, clearDirs, isLoop=False, overDay=3):
    28         print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M")+":执行中...")
    29         for dir in clearDirs:
    30            files = self.getFiles(dir, isLoop, overDay)
    31            print("{}查询出{}个文件".format(dir, len(files)))
    32            self.clearFiles(files)
    33         print("执行完毕...")
    34 
    35     # 清除文本文件
    36     def clearFiles(self, files):
    37         for file in files:
    38             strcmd = "rm -rf {}".format(file)
    39             self.exec_cmd(strcmd)
    40 
    41     #执行脚本命令
    42     def exec_cmd(self, strcmd):
    43         os.system(strcmd)
    44 
    45     #获取文件创建时间
    46     def getCreateFileTime(self, path):
    47         return os.path.getctime(path)
    48         
    49     #时间戳转datetime
    50     def TimeStampToTime(self,timestamp):
    51         return datetime.datetime.utcfromtimestamp(timestamp)
    52 
    53     #比较当前时间与文件创建时间差值(天)
    54     def compareFileTime(self, path,overDay):
    55         comparTime = self.TimeStampToTime(self.getCreateFileTime(path))
    56         now = datetime.datetime.utcnow() + datetime.timedelta(days= overDay)
    57         return now > comparTime
    58 
    59 
    60 # 要清除文本的磁盘 61 clearDirs = ["/data1/data/logs/xxl-job-web"]
    62 doFile = DoFile()
    63 doFile.doFiles(clearDirs, True,3)

    其逻辑可以分为下面几步:

    • 从doFiles进入,先去获取配置的clearDirs数组中的日志所在磁盘路径下面的日志文件
    • 获取待删除的文件,这些文件以.log后缀结尾,并且通过时间限定策略【当前时间+(-n天) > 文本日志创建时间】来识别哪些到期该删除了
    • 最后通过执行rm -rf命令直接删除符合时间策略的日志文件

    crontab定时任务

    上面只有了清除日志的py脚本,但是要定时执行该脚本才能到达自动的目的,不然每次都手动运行py脚本和直接手动删除日志文件没上面太大的区别和省时间,因此这里用到了crontab任务;编辑cron任务如下命令:

    1 crontab -e

    编辑cron任务,往里面添加定时每周或者每天执行上面的python脚本

    1 0 0 */1 * * python /abc/python/clearDirLog.py > /abc/python/dolog.log 2>&1

    上面cron表达式意思:定时每天执行一次clearDirLog.py脚本,并把clearDirLog.py里面打印出来的信息记录到dolog.log文件中;编辑任务保存后,我们可以通过如下命令查看cron的任务列表:

    1 crontab -l
  • 相关阅读:
    开发体系规范建议
    centos安装samba
    【OF框架】在部署中使用 Windows身份认证
    【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作
    【OF框架】定义框架标准WebApi,按照规范返回状态信息及数据信息
    【OF框架】使用IDbContextTransaction在框架中对多个实体进行事务操作
    【OF框架】新建库表及对应实体,并实现简单的增删改查操作,封装操作标准WebApi
    【OF框架】框架Cache/Session在负载均衡部署时,切换Memory/Redis测试
    【OF框架】在Visual Studio中启用Docker支持,编译生成,并在容器运行项目
    【OF框架】在Visual Studio中发布Docker镜像,推送镜像到Azure容器注册表
  • 原文地址:https://www.cnblogs.com/wangrudong003/p/10389181.html
Copyright © 2020-2023  润新知