清除過期日誌的py指令碼
本篇和大家分享的是一個清除過期日誌的python指令碼,年後第二篇希望對大家有幫助;
- 該python指令碼建立的由來
- 程式碼及分析
- crontab定時任務
該python指令碼建立的由來
此由來,是在過年假期時突然被反饋告警伺服器磁碟空間佔用比例增大,當時通過df等命令定位到,是使用了某個開源任務排程框架日誌增大並之前很多歷史日誌沒有自動刪除導致的;
因此,檢視該框架的文件是否有自動清除配置,暫時沒有找到自動清除日誌的配置說明,於是乎瀏覽原始碼就是log4來記錄的,本來打算擴充套件重寫下log4讓其具有自動清除日誌的功能,但是想到以後可能還有其他專案的日誌無法自動清除,於是乎有了本篇分享的python產出,僅僅配置下檢測路徑即可刪除自定義n天之前的日誌
程式碼及分析
先來上程式碼,具體如下:
#! /usr/bin/python
#coding=utf-8
import os
import datetime
import time
class DoFile():
# 獲取某個磁碟路徑裡所有檔案
def getFiles(self, strDir, isLoop, overDay):
files = []
if len(strDir) <= 0 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") >= 0): # 是.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=3):
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
# 要清除文字的磁碟 "D:/my_project/my_test/logs/mendian_platform/task/2018-09/26",
clearDirs = ["/data1/data/applogs/xxl-job-web"]
doFile = DoFile()
doFile.doFiles(clearDirs, True,3)
其邏輯可以分為下面幾步:
- 從doFiles進入,先去獲取配置的clearDirs陣列中的日誌所在磁碟路徑下面的日誌檔案
- 獲取待刪除的檔案,這些檔案以.log字尾結尾,並且通過時間限定策略【當前時間+(-n天) > 文字日誌建立時間】來識別哪些到期該刪除了
- 最後通過執行rm -rf命令直接刪除符合時間策略的日誌檔案
crontab定時任務
上面只有了清除日誌的py指令碼,但是要定時執行該指令碼才能到達自動的目的,不然每次都手動執行py指令碼和直接手動刪除日誌檔案沒上面太大的區別和省時間,因此這裡用到了crontab任務;編輯cron任務如下命令:
crontab -e
編輯cron任務,往裡面新增定時每週或者每天執行上面的python指令碼
0 0 */1 * * python /abc/python/clearDirLog.py > /abc/python/dolog.log 2>&1
上面cron表示式意思:定時每天執行一次clearDirLog.py指令碼,並把clearDirLog.py裡面列印出來的資訊記錄到dolog.log檔案中;
編輯任務儲存後,我們可以通過如下命令檢視cron的任務列表:
crontab -l
相關文章
- SQL Server 清除資料庫日誌指令碼SQLServer資料庫指令碼
- py指令碼得到Python的版本指令碼Python
- Linux/Unix shell 指令碼清除歸檔日誌檔案Linux指令碼
- 設定備份的過期日期
- 通過shell指令碼新增備庫日誌指令碼
- 除錯py程式碼踩過的坑除錯
- Mysql Binlog 定期清除指令碼(轉)MySql指令碼
- python 如何執行子層 py 指令碼Python指令碼
- 清除SqlServer日誌SQLServer
- 透過shell指令碼監控日誌切換頻率指令碼
- 通過shell指令碼監控日誌切換頻率指令碼
- 【shell】日誌切割指令碼指令碼
- 日誌刪除指令碼指令碼
- 日誌轉儲指令碼指令碼
- Python的學習(八)----py指令碼中呼叫應用程式Python指令碼
- 已有 python 自動化框架,透過 start.py 執行指令碼,現在想建立一個平臺,透過頁面下發介面,傳入引數到 start.py 並啟動指令碼,求教Python框架指令碼
- 指令碼處理iOS的Crash日誌指令碼iOS
- 處理Apache日誌的Bash指令碼Apache指令碼
- 指令碼日誌的標準輸出指令碼
- oracle 資料庫徹底清除目錄指令碼Oracle資料庫指令碼
- 透過分析secure日誌自動抵禦非法登陸ip的指令碼指令碼
- nginx日誌分割小指令碼Nginx指令碼
- linux 分享日誌指令碼Linux指令碼
- Kali Linux 2017.1指令碼gerix.py修復Linux指令碼
- 走近原始碼:Redis如何清除過期key原始碼Redis
- log4j2 自動刪除過期日誌檔案配置及實現原理解析
- 定時清理監聽日誌的指令碼 。指令碼
- PHP慢指令碼日誌和Mysql的慢查詢日誌PHP指令碼MySql
- mysql清除binlog日誌MySql
- 清除MySQL Binlog日誌MySql
- nginx自己寫日誌切割指令碼Nginx指令碼
- 清除SQL Server日誌的方法介紹SQLServer
- oracle 統計redo統計當天日誌生成和最近日期日誌生成統計Oracle
- 【shell 指令碼】刪除/var/log 下的日誌指令碼
- [20210623]完善清除aud指令碼.txt指令碼
- window下刪除過舊的日誌檔案指令碼(如jboss的日誌檔案 資料庫的trace檔案)指令碼資料庫
- Oracle RMAN 清除歸檔日誌Oracle
- Oracle RMAN清除歸檔日誌Oracle