132 lines
2.8 KiB
Python
Executable File
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()
|
|
|