ログフォーマット
アプリ-2019-07-24.log
アプリ-2019-07-24.1.log
その日のためのスクリプト内で複数のログファイルがあります。
#は/ usr / binに/ Pythonの #- * -コーディング:UTF-8 - * - #説明ログ圧縮 のインポートのOS インポート日時 インポート再 インポートtarファイルの #は、日付まで数日前に取得 DEFのGETDATE(before_day): 今日 = datetime.datetimeの。今() #は、オフセット計算 オフセット= datetime.timedelta(日数= - before_day) #は、所望の取得日時 re_date =(現在+オフセット).strftime(' %% Y-M-%のD ' ) 戻りre_date #サブディレクトリが含まれていない、ファイルパスのセットを取得 デフgetFile(logsPath): logs_file = [] file_listの = os.listdir(logsPath) 用 FILE_NAME でfile_listの: パス = os.path.join(logsPath、FILE_NAME) 場合os.path.isdir(パス): 続ける logs_file.appendを(パス) リターンlogs_file #检查文件、并压缩 DEF tar_file(logs_file、I): NEW_DATE = datetime.datetime.now()のstrftime(' %Y-%M-%D ') #当前时间 logs_old = [] のための Fでlogs_file: #圧縮ファイルを濾過 IF f.endswith(" .tar.gzファイル" ): 続行 #一定時間がログファイル名を取得する MAT = re.search(R&LT " 。(\ 4 {D} - \ D {1。 、2} - \ D {1,2})" 、F) IF BOOL(MAT): デルタ = datetime.datetime.strptime(NEW_DATE、' %% Y-M-%以下のD ') - datetime.datetime.strptime( mat.group()、' %% Y-M-%のD ' ) IF delta.days == I: F = re.split(" / "、F)[ - 1 ] logs_old.append(F) OLD_DATE = GETDATE(I) もし lenが(logs_old)== 0: 戻り ファイル名 = re.split(" - " 、logs_old [0])[0] 名 =再.split(" / "は、ファイル名)[ - 1 ] tar_file_name =ファイル名+ " - " + OLD_DATE + " .tar.gzの" #1 プリント(tar_file_name) 場合os.path.exists(tar_file_name): プリント(tar_file_name、"存在である" ) 戻り タール = tarfile.open(tar_file_nameは、" W:GZ " ) のための I におけるlogs_old: tar.add(I) os.remove(I) tar.close 場合 __name__ == " __main__ " : logsPath = " / OPT / " os.chdir(logsPath) logs_file = はgetFile(logsPath) 用 I における範囲(1、4 ): tar_file(logs_file、I)
スケジュールされた時刻に設定してください
これは私のスクリプトパス(/opt/script/tar_logs.py)であります
0 5 * * *は/ usr / binに/ Pythonの/opt/script/tar_logs.py