fragment/常用脚本/python/rollback_log.py
2021-08-29 00:02:47 +08:00

132 lines
2.8 KiB
Python
Executable File

#!/usr/bin/python2
from socket import *
import time
import sys
import os
import re
import signal
import ConfigParser
import struct
import subprocess
import shutil
from subprocess import Popen
#sys.path.append('/lib/')
import rising_log
ROLLBACK_CONF = 'rollback_log.cfg'
### init log ###
global logger
logger = rising_log.init_log('rollback_log', 'msg_log.ini', 0, 0)
def _sig_INT_handle(signum, frame):
logger.error("SIGINT recieve, exit()")
sys.exit()
def dir_status(log_dir,used):
syscmd = 'du -s %s'%(log_dir)
output = Popen(syscmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output_err = output.stderr.readlines()
output_out = output.stdout.readlines()
if len(output_err) > 0:
for line in output_err:
logger.error("%s",line)
logger.error("syscmd:%s failed",syscmd)
return 0
if len(output_out) > 0:
for line in output_out:
if log_dir in line:
dir_used = int(line.split("\t")[0])/1024
logger.info("dir used:%d, max:%d",dir_used,used)
if dir_used > used:
logger.info("disk used:%d to max:%d",dir_used,used)
return -1
return 0
def check_dir(data_dir):
if not os.path.exists(data_dir):
logger.error("no dir:%s,then create dir",data_dir)
os.makedirs(data_dir)
def init_rollback_config(config_file):
rollback_config = {}
try:
config = ConfigParser.ConfigParser()
config.read(config_file)
rollback_config['interval'] = config.get('conf', 'interval')
rollback_config['day'] = config.get('conf', 'day')
rollback_config['used'] = config.get('conf', 'used')
rollback_config['log_dir'] = config.get('conf', 'log_dir')
except Exception,msg:
logger.error(str(msg).strip())
sys.exit(1)
return rollback_config
def rollback_log(log_dir,day,used):
file_list = []
logdir_list =[]
file_list = os.listdir(log_dir)
if len(file_list) <= 0:
logger.debug("no log data in dir:%s",log_dir)
return 0
file_list.sort(reverse=True)
dir_num = 0
for i in file_list:
logdir_name = os.path.join(log_dir, i)
if os.path.isdir(logdir_name):
dir_num = dir_num + 1
if dir_num > day:
logger.info("dir_num:%d, maxnum:%d",dir_num,day)
logger.info("delete log dir:%s",logdir_name)
shutil.rmtree(logdir_name)
else:
logdir_list.append(logdir_name)
logdir_list.sort()
del logdir_list[-1]
for i in logdir_list:
if dir_status(log_dir,used) < 0 :
logger.info("delete log dir:%s",i)
shutil.rmtree(i)
else:
break
return 1
def main():
signal.signal(signal.SIGINT, _sig_INT_handle)
while(1):
rollback_config = init_rollback_config(ROLLBACK_CONF)
sleep_interval = int(rollback_config['interval'])
log_dir = rollback_config['log_dir']
day = int(rollback_config['day'])
used = int(rollback_config['used'])
rollback_log(log_dir,day,used)
time.sleep(sleep_interval)
if __name__ == '__main__':
main()