清除过期日志的py脚本

简介: 本篇和大家分享的是一个清除过期日志的python脚本,年后第二篇希望对大家有帮助;该python脚本创建的由来代码及分析crontab定时任务该python脚本创建的由来此由来,是在过年假期时突然被反馈告警服务器磁盘空间占用比例增大,当时通过df等命令定位到,是使用了某个开源任务调度...

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

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

该python脚本创建的由来

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

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

代码及分析

先来上代码,具体如下:

#!  /usr/bin/python
#coding=utf-8
import os
import datetime
import time


class DoFile():
    # 获取某个磁盘路径里所有文件
    def getFiles(self, strDir, isLoop, overDay):
        files = []
        if len(strDir) <= 0 or not os.path.exists(strDir):
            return files
        dirs = os.listdir(strDir)
        for dir in dirs:
            path = os.path.join(strDir, dir)
            if(os.path.isfile(path) and path.find(".log") >= 0):  # 是.log文件
                if(self.compareFileTime(path, -overDay)):
                    files.append(path)
            elif(os.path.isdir(path) and isLoop):  # 是磁盘
               files.extend(self.getFiles(path, isLoop, overDay))
            else:
                continue
        return files

    # 综合处理磁盘文件
    def doFiles(self, clearDirs, isLoop=False, overDay=3):
        print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M")+":执行中...")
        for dir in clearDirs:
           files = self.getFiles(dir, isLoop, overDay)
           print("{}查询出{}个文件".format(dir, len(files)))
           self.clearFiles(files)
        print("执行完毕...")

    # 清除文本文件
    def clearFiles(self, files):
        for file in files:
            strcmd = "rm -rf {}".format(file)
            self.exec_cmd(strcmd)

    #执行脚本命令
    def exec_cmd(self, strcmd):
        os.system(strcmd)

    #获取文件创建时间
    def getCreateFileTime(self, path):
        return os.path.getctime(path)
        
    #时间戳转datetime
    def TimeStampToTime(self,timestamp):
        return datetime.datetime.utcfromtimestamp(timestamp)

    #比较当前时间与文件创建时间差值(天)
    def compareFileTime(self, path,overDay):
        comparTime = self.TimeStampToTime(self.getCreateFileTime(path))
        now = datetime.datetime.utcnow() + datetime.timedelta(days= overDay)
        return now > comparTime


# 要清除文本的磁盘 "D:/my_project/my_test/logs/mendian_platform/task/2018-09/26",
clearDirs = ["/data1/data/applogs/xxl-job-web"]
doFile = DoFile()
doFile.doFiles(clearDirs, True,3)

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

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

crontab定时任务

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

crontab -e

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

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

上面cron表达式意思:定时每天执行一次clearDirLog.py脚本,并把clearDirLog.py里面打印出来的信息记录到dolog.log文件中;

编辑任务保存后,我们可以通过如下命令查看cron的任务列表:

crontab -l
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
17天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
70 1
|
3月前
|
存储
优秀开源日志平台GrayLog5.0一键安装脚本
优秀开源日志平台GrayLog5.0一键安装脚本
89 0
|
5月前
|
关系型数据库 MySQL Shell
如何用shell脚本获取mysql的binlog日志
如何用shell脚本获取mysql的binlog日志
62 1
|
4月前
|
Kubernetes Shell Linux
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
54 0
|
2月前
|
Java Shell Perl
使用shell脚本给日志文件瘦身
使用shell脚本给日志文件瘦身
|
3月前
|
Linux Shell
开源日志平台GrayLog5.1.10 CentOS7一键安装脚本
开源日志平台GrayLog5.1.10 CentOS7一键安装脚本
96 0
|
3月前
|
Linux
开源日志平台GrayLog5.1.7 CentOS7一键安装脚本
开源日志平台GrayLog5.1.7 CentOS7一键安装脚本
81 1
|
3月前
开源日志平台GrayLog5.1.2一键安装脚本
开源日志平台GrayLog5.1.2一键安装脚本
48 0
|
9月前
|
Linux Shell Docker
chatgpt Linux 定时任务 清理rancher pod启动服务的日志文件 脚本
chatgpt Linux 定时任务 清理rancher pod启动服务的日志文件 脚本
|
5月前
|
应用服务中间件 Shell 网络安全
用shell脚本获取Nginx日志
用shell脚本获取Nginx日志
58 1