Download bt-source/panel/script/logSplit.py from SZFSPC/apple: direct link, hf CLI and curl.
- Browser
- Download file 3.56 kB
-
https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/script/logSplit.py
- Command line
-
hf download hf://spaces/SZFSPC/apple/bt-source/panel/script/logSplit.py
-
curl -L -o logSplit.py https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/script/logSplit.py
3.56 kB
| #!/usr/bin/python | |
| #coding: utf-8 | |
| #----------------------------- | |
| #宝塔Linux面板网站日志切割脚本 | |
| #----------------------------- | |
| 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() |