清除过期日志的py脚本
2019-02-17 01:53:53来源:博客园 阅读 ()
本篇和大家分享的是一个清除过期日志的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
原文链接:https://www.cnblogs.com/wangrudong003/p/10389181.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 封装查找元素以及集成日志输出,Base模块 2019-07-24
- python 之 logger日志 字典配置文件 2019-07-24
- 如何为Python日志输出着色? 2019-06-13
- python操作日志的封装 2019-05-23
- 【问题探索日志】python 函数优化 2019-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash