本篇和大家分享的是一个清除过期日志的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. JavaScript 设计模式之----单体(单例)模式

    设计模式之--单体(单例)模式 1.介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现.OK,正式开始. 在传统开发工 ...

  2. 【BZOJ 2744】【HEOI2012】朋友圈

    题目链接: TP 题解: 对于A国,我们发现,最大团一定不大于2.对于B国,发现同奇偶性点之间都有边,不同奇偶性之间可能有边,也就是说对于B国是一个二分图最大团,也就是求B国补图的二分图最大独立集.然 ...

  3. [JSOI2008]星球大战starwar BZOJ1015

    并查集 正序处理时间复杂度为n^2,考虑逆序处理,这样,时间复杂度从n^2降为nlogn 附上代码: #include <cstdio> #include <algorithm> ...

  4. appium---【已解决】【Mac】from appium import webdriver报错提示“Unresolved import webdriver”

    报错提示: from appium import webdriver提示Unresolved import webdriver 报错原因:没有安装Appium_Python_Client 解决办法: ...

  5. Django web框架开发基础-django实现留言板功能

    1.创建项目 cmd  django-admin startpoject cloudms 2.创建APP cmd django-admin startapp msgapp 3.修改settings,T ...

  6. es6学习笔记-proxy对象

    前提摘要 尤大大的vue3.0即将到来,虽然学不动了,但是还要学的啊,据说vue3.0是基于proxy来进行对值进行拦截并操作,所以es6的proxy也是要学习一下的. 一 什么是proxy Prox ...

  7. 基于ko-easyui实现的PC前端模板功能完善

    上一篇博客我向大家介绍了基于ko-easyui实现的开发模板,博客地址:https://www.cnblogs.com/cqhaibin/p/9825465.html#4095185.但在还遗留三个问 ...

  8. ssm客户管理系统的设计与实现

    ssm客户管理系统 注意:系统是在实现我的上一篇文章 https://www.cnblogs.com/peter-hao/p/ssm.html的基础上开发 1     需求 1.1   添加客户 客户 ...

  9. HTTP/2 简介

    支撑现有 Web 服务的 HTTP 协议距离其发布时的 1997 年已经有些年月了,随后的 HTTP/1.1 版本发布自 1999 年.随着技术的进步和需求的进化,对于数据快速高效地传输,HTTP/1 ...

  10. SpringBoot从零单排 ------初级入门篇

    有人说SSM已死,未来是SpringBoot和SpringCloud的天下,这个观点可能有点极端,但不可否认的是已经越来越多的公司开始使用SpringBoot.所以我将平时学习SpringBoot的内 ...