說明:
此指令碼功能為備份tomcat下的所有日誌檔案、打包、清空原始日誌、刪除30天以前的備份資料
**:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import os
import time
import datetime
import socket
import logging
import sys
#獲取主機名
hostname = socket.gethostname()
print (hostname)
#備份時長
data = 30
source_path = "/home/tomcat/tomcat-jenkins/logs/"
target_path = "/home/backup/"
file_backup_path = target_path + hostname + "/cut_log_everyday/file_bak"
tar_backup_path = target_path + hostname + "/cut_log_everyday/old_bak"
datetime = time.strftime('%y%m%d%h%m%s')
time = time.strftime('%y-%m-%d %h:%m:%s')
filelist = os.listdir(source_path)
#建立備份檔案夾
if not os.path.exists(file_backup_path):
os.makedirs(file_backup_path)
if not os.path.exists(tar_backup_path):
os.makedirs(tar_backup_path)
#定義日誌級別
logging.basicconfig(level=logging.debug,filename=target_path + hostname + '/cut_log_everyday/file_backup.log',filemode='w',format='%(asctime)s - %(levelname)s: %(message)s')
#執行備份函式
def run_backup():
for file1_name in filelist:
#print (file_name)
source_file=source_path + file1_name
dumpcmd = "cp -r" +" " +source_file +" "+ file_backup_path
os.system(dumpcmd)
logging.info("檔案%s備份完成!" %file1_name)
logging.info("##################所有檔案備份完成!##########################")
#執行壓縮函式
def run_tar():
logging.info("##################開始打包檔案!######################")
filelist2=os.listdir(file_backup_path)
for file2_name in filelist2:
filetar=file2_name+"-"+datetime+".tar.gz"
tarcmd= "tar -zcvf"+" "+tar_backup_path+"/"+filetar+" "+file_backup_path+"/"+file2_name
os.system(tarcmd)
logging.info("檔案%s打包完成!" %file2_name)
remove_cmd = "rm -rf "+file_backup_path+"/"+file2_name
os.system(remove_cmd)
logging.info("##################所有檔案打包完成!##################")
#執行刪除函式,清空原始日誌
def run_del():
logging.info("##################開始清空原始日誌!##################")
for i in filelist:
file_path = os.path.join(source_path,i)
if os.path.isfile(file_path):
with open(file_path, 'r+', encoding='utf-8') as f:
if i[-14:-10] == time[0:4]:
os.remove(file_path)
logging.info("檔案%s被刪除" % i)
else:
res = f.readlines()
f.seek(0)
f.truncate()
logging.info("檔案%s被清空" % i)
f.close()
elif os.path.isdir(file_path):
logging.info('%s是乙個目錄,清空該目錄下的所有檔案' % file_path)
for root,dirs,files in os.walk(file_path,topdown=false):
for name in files:
file1_path=os.path.join(root,name)
with open(file1_path, 'r+', encoding='utf-8') as f1:
res = f1.readlines()
f1.seek(0)
f1.truncate()
logging.info('檔案%s被清空' % file1_path)
f1.close()
else:
#執行清空30天以前的打包資料
def run_rm():
logging.info('###############開始檢測是否有乙個月之前的備份資料################')
f = list(os.listdir(tar_backup_path))
# 獲取當前時間
today=datetime.datetime.now()
# 計算偏移量,前30天
offset=datetime.timedelta(days=-30)
re_date = (today + offset)
# 前30天時間轉換為時間戳
re_date_unix = time.mktime(re_date.timetuple())
for i in f:
if i[-6:] == 'tar.gz':
file_time = os.path.getmtime(tar_backup_path+"/"+i)
timearray = time.localtime(file_time)
otherstyletime = time.strftime("%y-%m-%d %h:%m:%s", timearray)
#print ("檔案修改時間%s", % otherstyletime)
if file_time <= re_date_unix:
logging.info('已經超過30天,刪除%s下的%s成功!' % (tar_backup_path,i))
os.remove(tar_backup_path+"/"+i)
if __name__ == '__main__':
logging.info("指令碼執行開始at:%s" % time)
run_backup()
run_tar()
run_del()
run_rm()
logging.info("指令碼執行結束at:%s" % time.strftime('%y-%m-%d %h:%m:%s'))
好了,這就是python3備份tomcat日誌的**,如有問題可與博主一起交流討論!
Python3 x編碼問題
1.記事本的ansi編碼為系統本地編碼,我的是gbk open 函式的encoding引數預設是本地編碼,也就是gbk,所以直接讀取ansi編碼的記事本檔案是木有問題的。怎麼檢視系統本地編碼?在cmd下輸入 chcp 從下表可以看出,936對應gbk編碼 下表列出了所有支援的 頁及其國家 地區 或者...
Python 內建函式(Python 3 x)
1 type obj 返回變數型別 2 isinstance object,class or type or tuple 測試物件是否為指定型別的例項 4 range start,end step 返回乙個 start,end 內的 range 物件,start 預設為 0,step 預設為 1 5...
python3記憶體快取 python 3 x
我試圖通過telnet 使用控制台伺服器控制台 到cisco路由器,執行一些show命令,並將它們的輸出儲存在變數中。下面是簡單的指令碼的工作原理 在執行指令碼之前已經登入到路由器 在實際使用案例中不是很有用 import telnetlib import datetime import getpa...