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

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

该python脚本创建的由来

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

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

代码及分析

先来上代码,具体如下:

 #!  /usr/bin/python
#coding=utf-
import os
import datetime
import time class DoFile():
# 获取某个磁盘路径里所有文件
def getFiles(self, strDir, isLoop, overDay):
files = []
if len(strDir) <= 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") >= ): # 是.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=):
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 # 要清除文本的磁盘 clearDirs = ["/data1/data/logs/xxl-job-web"]
doFile = DoFile()
doFile.doFiles(clearDirs, True,)

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

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

crontab定时任务

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

 crontab -e

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

   */ * * python /abc/python/clearDirLog.py > /abc/python/dolog.log >&

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

 crontab -l

清除过期日志的py脚本的更多相关文章

  1. log4j 设置将生成的日志进行gz压缩并删除过期日志

    1.准备jar  :log4j-1.2.17.jar,commons-logging-1.2.jar,这2个就可以了,其他关于日志的jar包就不要加进来了,在优先级上会有冲突. 2.定义一个类,继承R ...

  2. 清除tomcat日志文件的shell脚本

    #! /bin/bash d=`date +%F` exec >> /mydata/script/logs/$d>& echo "开始执行清除tomcat日志文件& ...

  3. Oracle RMAN 清除归档日志

    在开发环境及UAT环境经常碰到需要清除归档日志的情形,对于这个问题方法有很多.可以直接使用rm方式清除归档日志,也可以使用find命令来查找符合条件的记录来清除归档日志,或者直接写个shell脚本来搞 ...

  4. Linux下自动清除MySQL日志文件

    MySQL运行过程中会生成大量的日志文件,占用不少空间,修改my.cnf文件配置bin-log过期时间,在Linux下自动清除MySQL日志文件 [mysqld] expire-logs-days= ...

  5. sql server 2008中清除数据库日志的sql语句

    第一步: Use  数据库名 Select NAME,size From sys.database_files 将“数据库名”改为需要清除日志的数据库名字,点击“执行”查询出需要清除的日志名称:**_ ...

  6. cocos2d-x 2.1.4 使用create_project.py脚本创建项目+ant打包项目

    1.创建项目:执行create_project.py脚本,进入Doc界面输入下面的命令: cd D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4\tools\project-cre ...

  7. py脚本打包exe可执行文件

    python3以上版本打包exe需要扩展软件:cx_freeze 下载地址:http://cx-freeze.sourceforge.net/ 1)安装后在\Python32\Scripts\cxfr ...

  8. 清除sqlserver日志方法(不适合always on)

    清除sqlserver日志方法 --查看数据库的recovery_model_desc类型 SELECT NAME, recovery_model_desc FROM sys.databases -- ...

  9. Hadoop日志分析系统启动脚本

    Hadoop日志分析系统启动脚本 #!/bin/bash #Flume日志数据的根文件夹 root_path=/flume #Mapreduce处理后的数据文件夹 process_path=/proc ...

随机推荐

  1. github 用git bash上传项目 最后提示 Everything up-to-date 但没传上去

    今天为了把本地的项目远程到githup远程仓库,把好久不用的githup命令重新用了起来,不用怀疑,很正常的出错了. 为了长点记性,总结错误与解决办法如下: 1.我犯得第一个简单错误,是忘了git c ...

  2. netData.go 阅读源码

    ) // 定义数据传输结构 type NetData struct {     // 消息体     Body interface{}     // 操作代号     Operation string ...

  3. Oracle系列-锁表与解锁解决方案(大招版)-解决问题才是王道

    [Oracle系列-锁表与解锁解决方案(大招版)] --1查看被锁的表 select b.owner,b.object_name,a.session_id,a.locked_mode from v$l ...

  4. Entity Framework Core 关联删除

    关联删除通常是一个数据库术语,用于描述在删除行时允许自动触发删除关联行的特征:即当主表的数据行被删除时,自动将关联表中依赖的数据行进行删除,或者将外键更新为NULL或默认值. 数据库关联删除行为 我们 ...

  5. 改造MIP获得搜索青睐,轻松完成SEO

    搜索引擎目标及页面排序方法 搜索引擎作为互联网流量的入口,承担着流量分发的职责.但排序成千上万的网页,决定哪些网页在第一页,是由网页本身的用户体验决定的.权重算法会从内容优质性,广告多少,加载速度等多 ...

  6. Asp.net Core 2.2关于AutoMapper更初级的入门教程

    今天刚看到老张的哲学博客关于AutoMapper的教程,从壹开始前后端分离[ .NET Core2.0 +Vue2.0 ]框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完 ...

  7. python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)

    简介 大多数的初学者在使用 unittest 框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行.虽然或许通过代码实现了,也是稀里糊涂的一知 ...

  8. Spring Boot入门(五):使用JDBC访问MySql数据库

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序开发的过程中,操作数据库是必不可少的部分,前面几篇博客中,也一直未涉及到数据库的操作,本篇博客 就 ...

  9. CSS引入本地字体与在线字体

    有些时候为了强调某些文字,需要使用一些比较特别的字体,CSS中现在也可以比较方便的引入字体了,如下: /* 定义字体 */ @font-face{ font-family: Arista2; src: ...

  10. 使用CSS3的clip-path(裁剪路径)实现剪贴区域的显示以及实例实现图片渐变

    clip-path介绍 clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法.想象一下你在Photoshop中勾勒路径的场景.MDN上是这样介绍 clip-p ...