服务器日志清理备份,日志清理备份,#! /usr/bin/


#! /usr/bin/env python#coding=utf-8import osimport timeimport subprocessimport httplib2import jsonfrom mailtool import sendMailfrom datetime import datetimeimport tarfiledef command(command):    p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)    result = str()    for line in p.stdout.readlines():       result = result + str(line,encoding="utf-8")    return resultdef getip():    h = httplib2.Http(".cache")    resp, content = h.request("http://ip.taobao.com/service/getIpInfo2.php?ip=myip", "GET")    result = str(content,encoding="utf-8")    result = json.loads(result)    return (result["data"]["ip"])def listfile(path):    if os.path.isdir(path) and  os.path.exists(path):        for file in os.listdir(path):            yield path,file    else:        sendMail("目录存在问题",getip() + " " + command("hostname") + " " + path + " 不是目录或者目录不存在","***@***.cn")        print("not value path " + path)def createTarfile(path,file,logbakpath):    baklogfile = logbakpath + "/" + file+".tar.gz"    if os.path.exists(baklogfile) :        print(str(datetime.now()) + " " + baklogfile + " alread exists")        return;    tar = tarfile.open(baklogfile,"w:gz")    tar.add(os.path.join(path,file))    tar.close()def checklinkpath(path):    if os.path.islink(path):        return os.readlink(path)    return pathdef checkpath(path):    while path.endswith("/"):        path = path[:-1]    return pathdef mkBackpath(logbakpath):    if not os.path.exists(logbakpath):        os.makedirs(logbakpath)        print("make bak dir success")def processlog(path,file):    path = checklinkpath(path)    path = checkpath(path)    logbakpath = os.path.dirname(path) + "/logsBack"    mkBackpath(logbakpath)    #文件的日期为10天前的文件,压缩,备份,删除,    createdatetime = datetime.fromtimestamp(os.path.getctime(path+"/"+file))    intervaldays = (datetime.now() - createdatetime).days    if not intervaldays and (file.endswith(".log") or file.endswith(".out")): #当天的文件不处理        print(str(datetime.now()) + " today file not process " + path +"/" + file)        return    if file.startswith("."): #隐藏的文件不处理        print(str(datetime.now()) + " hidden file not process " + path +"/" + file)        return    if os.path.isdir(os.path.join(path,file)):        print(str(datetime.now()) + " dir not process " + path +"/" + file)        return    print(str(datetime.now()) + " start process " + path +"/" + file)    #文件不为当前的,在logsBack下面产生对应文件的备份文件,如果文件超过7天删除该文件    createTarfile(path,file,logbakpath)    if intervaldays > 7:       os.remove(os.path.join(path,file))       print(str(datetime.now()) + " del log file " + path +"/" + file)if __name__ == "__main__":    '''        处理日志文件的工具    '''    targetList = [        "/work/java_project/***/src/main/webapp/logs//",        "/home/***/links/***logs"    ]    try:        for path in targetList:            for filepath,filename in listfile(path):                processlog(filepath,filename)            print("process path " + path + " success!")    except Exception as e:        sendMail("处理文件异常 ",getip() + " " + command("hostname") + " 处理文件存在异常" + e,"***@***.cn")    #check disk    disk = os.statvfs("/")    hd = {}    hd['available'] = disk.f_bsize * disk.f_bavail/(1024**3)    hd['capacity'] = disk.f_bsize * disk.f_blocks/(1024**3)    hd['used'] = disk.f_bsize * disk.f_bfree/(1024**3)    if hd['used']/hd['capacity'] > 0.80:        message = "磁盘已使用情况:\t" + str(hd['used']/hd['capacity']) +"%\r\n"        message = message + "磁盘剩余情况:\t" + str(hd['available']/hd['capacity']) +"%\r\n"        message = message + str(hd);        sendMail("磁盘空间监控 ","服务iq:\t"+getip() + "\r\nhostname:\t" + command("hostname") + "\r\n磁盘空间不足(单位为G),明细:\r\n" + message,"***@***.cn")

评论关闭