文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

清除过期日志的py脚本

2023-01-30 23:35

关注

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

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

此由来,是在过年假期时突然被反馈告警服务器磁盘空间占用比例增大,当时通过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命令直接删除符合时间策略的日志文件

上面只有了清除日志的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
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯