| |
| |
| |
| |
| |
| import sys |
| import os |
| import shutil |
| import time |
| import glob |
| os.chdir("/www/server/panel") |
| sys.path.append('class/') |
| import public,json |
|
|
|
|
| data = {} |
| path = '{}/data/cutting_log.json'.format(public.get_panel_path()) |
| if os.path.exists(path): |
| try: |
| data = json.loads(public.readFile(path)) |
| except:pass |
|
|
| print ('==================================================================') |
| print( '★['+time.strftime("%Y/%m/%d %H:%M:%S")+'],切割日志') |
| print ('==================================================================') |
|
|
|
|
| |
| def get_file_ext(filename): |
| """ |
| @name 获取文件扩展名 |
| @param filename |
| """ |
| ss_exts = ['.tar.gz','.tar.bz2','.tar.bz'] |
| for s in ss_exts: |
| e_len = len(s) |
| f_len = len(filename) |
| if f_len < e_len: continue |
| if filename[-e_len:] == s: |
| return filename[:-e_len] ,s |
| if filename.find('.') == -1: return '' |
| return os.path.splitext(filename) |
|
|
|
|
| def split_log(): |
| """ |
| @name 拆分日志 |
| """ |
| for key in data: |
| print('|-正在处理文件: {}'.format(key)) |
| if not os.path.exists(key): |
| print('|---文件不存在,跳过!') |
| continue |
|
|
| num = 1024 |
| limit = 180 |
| stype = 'day' |
|
|
| info = data[key] |
| s_msg = '|---切割方式: 每天切割1份' |
| try: |
| limit = int(info['limit']) |
| stype = info['type'] |
| if stype in ['size']: |
| num = info[stype] |
| s_msg = '|---切割方式: 按文件大小切割,每个文件大小为{}'.format(public.to_size(num)) |
| except: |
| print ('|---配置文件错误,跳过!') |
| continue |
|
|
| print(s_msg) |
| print ('|---当前保留最新的[{}]份'.format(limit)) |
|
|
| fname,fpath = os.path.basename(key),os.path.dirname(key) |
| log_path = os.path.join(fpath,'history_backups') |
| if not os.path.exists(log_path): os.makedirs(log_path,384) |
|
|
| sfile = '{}/{}'.format(log_path,fname) |
| spath,ext = get_file_ext(sfile) |
|
|
| |
| dfile = '{}_{}{}'.format(spath,time.strftime("%Y-%m-%d"),ext) |
| if stype == 'size': |
| dfile = '{}_{}{}'.format(spath,time.strftime("%Y-%m-%d_%H%M%S"),ext) |
|
|
| |
| if os.path.getsize(key) < num: |
| print ('|---文件大小未超过[{}],跳过!'.format(num)) |
| continue |
|
|
| if os.path.exists(dfile): |
| print('|---文件已存在,跳过!') |
| continue |
|
|
| logs = sorted(glob.glob(spath + "_*")) |
| old_logs = sorted(glob.glob(spath+ "_*" + ext)) |
|
|
| count = len(logs) |
| remove_num=count - info['limit'] |
| old_list = old_logs[:remove_num] |
| for i in old_list: |
| try: |
| if os.path.exists(i): |
| os.remove(i) |
| print('|---多余日志['+i+']已删除!') |
| except:pass |
|
|
| shutil.copyfile(key,dfile) |
| try: |
| os.remove(key) |
| except:pass |
| print('|---已切割日志到:'+dfile) |
| if 'callback' in info and info['callback']: |
| public.ExecShell(info['callback']) |
| print('|---执行回调函数') |
|
|
| if __name__ == '__main__': |
|
|
| split_log() |