本篇和大家分享的是一个清除过期日志的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. JVM学习记录-垃圾收集器

    先回顾一下上一篇介绍的JVM中常见几种垃圾收集算法: 标记-清除算法(Mark-Sweep). 复制算法(Copying). 标记整理算法(Mark-Compact). 分代收集算法(Generati ...

  2. vue的传参方式和router使用技巧

    vue传参方法一 1,路由配置 { path: '/describe/:id', name: 'Describe', component: Describe } 2,使用方法 // 直接调用$rout ...

  3. I/O-----字符输出流

    package io.day04; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileR ...

  4. bzoj 1426 收集邮票

    f[i]:当前已拥有i种邮票,还需要买的邮票数的期望值. g[i]:当前已拥有i种邮票,还需要的钱的期望值. 每张邮票初始都是1元钱,每买一张邮票,还没购买的邮票每张都涨价1元.  f[i]=1+(n ...

  5. Java线程与Linux内核线程的映射关系

    Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...

  6. python3——模块

    今天去听一个关于创业的讲座,心疼自己在那个地方站了 一个多小时(QAQ)我是心疼自己傻呀! 手机打王者之后就没有电了,一直站在那儿! 不过最后还是结束了,以后你们也会有很多讲座的,希望学弟学妹好好听讲 ...

  7. Postman----设置代理抓取手机上的请求

    一般为方便接口测试,我们都会设置代理,抓取手机上的请求来方便测试,具体的操作方法如下. 操作步骤: 一.手机和电脑连接同一网络,查看电脑连接网络的IP,配置手机的代理 1.查看电脑连接的网络与IP地址 ...

  8. 【已解决】通过Package或者Package+Activity启动应用

    有时很烦人,打开要启动的apk,通过adb命令(adb shell "dumpsys activity |grep Focuse") 获取到的应用包名 无法使用adb命令(adb ...

  9. [Hyperledger] Fabric系统中 peer模块的 gossip服务详解

    最近一直在看fabric系统中的核心模块之一——peer模块.在看peer的配置文件core.yaml的信息时,对其中的gossip配置选项很感兴趣.看了一上午,还是不能明白这个选项到底什么意思呢?表 ...

  10. 微信小程序之表单验证

    表单验证 何为表单验证呢? 百度百科给出的回答是这样的: 表单验证是javascript中的高级选项之一.JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证 [ ...