公司的nginx日志都放在一个文件里,时间长了,日志也变的很大,查起来也很不方便,所以决定将nginx的日志切割下,当然日志切割用shell写更方便,但为了让自己多实践下python,故用python来实现。日志切割需求:每天切割nginx日志,保留一个月的即可。以下是具体实现方法。
#!/usr/bin/env python # coding=utf-8 # author:xupeng(xupeng.js@gmail.com) # Description:nginx日志切割脚本 # Usage crontab: 59 23 * * * python /path/logcron.py import os import glob import time import shutil #日志路径 path = '/htdocs/logs' #切割后日志路径 cut_path = '/htdocs/cutlogs' #nginx pid nginx_pid = '/usr/local/nginx/nginx.pid' #删除之前一个月的日志目录 year = int(time.strftime("%Y", time.localtime())) month = int(time.strftime("%m", time.localtime())) if (month == 1): year = year - 1 month = 12 else: month = month - 1 year = str(year) month = str(month) if (len(month) == 1): month = '0' + month olddir = cut_path +'/' + year + month if os.path.exists(olddir): shutil.rmtree(olddir) #创建目录 cut_path = cut_path + '/' + str(time.strftime("%Y%m", time.localtime())) + '/' if not os.path.exists(cut_path): os.makedirs(cut_path) #切割日志目录下的日志 files = glob.glob("%s/*.log"%(path)) for sfile in files: filearr = sfile.split('.') filename = filearr[0] filename = filename.split(path) filename = filename[1].replace('/', '') newfilename = cut_path + filename + '_' + str(time.strftime("%Y%m%d", time.localtime())) + '.log' #print newfilename os.system("mv %s %s"%(sfile,newfilename)) #重新打开日志文件 os.system("kill -s USR1 `cat %s`"%(nginx_pid))