前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >清除过期日志的py脚本

清除过期日志的py脚本

作者头像
py3study
发布2020-01-17 16:34:12
5390
发布2020-01-17 16:34:12
举报
文章被收录于专栏:python3python3

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

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

该python脚本创建的由来

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

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

代码及分析

先来上代码,具体如下:

代码语言:javascript
复制
 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任务如下命令:

代码语言:javascript
复制
1 crontab -e

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

代码语言:javascript
复制
1 0 0 */1 * * python /abc/python/clearDirLog.py > /abc/python/dolog.log 2>&1

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

代码语言:javascript
复制
1 crontab -l
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 该python脚本创建的由来
  • 代码及分析
  • crontab定时任务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档