博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
清除过期日志的py脚本
阅读量:5077 次
发布时间:2019-06-12

本文共 2930 字,大约阅读时间需要 9 分钟。

本篇和大家分享的是一个清除过期日志的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 files14         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                 continue24         return files25 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     #时间戳转datetime50     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 > comparTime58 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

转载于:https://www.cnblogs.com/wangrudong003/p/10389181.html

你可能感兴趣的文章
linux C访问mysql 基础
查看>>
LeetCode N-Queens II
查看>>
JSP作业3-金字塔
查看>>
Generate BKS File( Bouncy Castle KeyStore)
查看>>
obdg反汇编破解crackme
查看>>
Python作业1 登录程序
查看>>
js弹出模态与非模态页面
查看>>
POJ - 3090 gcd水题
查看>>
第四讲 深入介绍信号与槽
查看>>
.gitignore梳理
查看>>
Lucene/Solr搜索引擎开发笔记 - 写作方向调整
查看>>
JavaScript 数据类型小结
查看>>
-webkit-overflow-scrolling:touch iosBug
查看>>
HDU2028:Lowest Common Multiple Plus
查看>>
辞树的QAQ水题(字符串统计,思维)
查看>>
python自动化之路 day5-1 paramiko模块
查看>>
安全证书的问题
查看>>
习题3.4 最长连续递增子序列(20 分)浙大版《数据结构(第2版)》题目集
查看>>
Browser
查看>>
virtualbox主机与虚拟机之间互相通信教程
查看>>