设为首页 收藏本站
查看: 733|回复: 0

[经验分享] nginx切割日志脚本(python)

[复制链接]

尚未签到

发表于 2018-8-5 09:59:04 | 显示全部楼层 |阅读模式
#coding:utf-8  '''
  Version: 1.0.0
  Actor:youshumin
  Date:2018/04/28
  脚本需求--
  1.用户提供一个nginx日志路径 (目录)
  2.用户提供nginxnginx执行路径
  3.备份日志路径
  4.保留多久的存储日志文件或者空间 天和GB为单位
  '''
  #######
  Nginx_Log_Dir="/data/nginx/web1/"
  Nginx_Pid_File="/usr/local/nginx/sbin/nginx"
  Nginx_Bak_Dir="/data/nginx/bak/web1"
  Nginx_Bak_Day=15
  Nginx_Bak_Max_Size=20
  #######
  import os,time,shutil
  import tarfile,datetime
  TIME_Secs=time.strftime("%Y%m%d%H%M%S",
  time.localtime())
  Time_Day=time.strftime("%Y%m%d",time.localtime())
  POSSIBLE_TOPDIR=os.path.normpath(os.path.abspath(Nginx_Log_Dir))
  Tmp_Work_File=os.path.normpath(os.path.join(POSSIBLE_TOPDIR,
  TIME_Secs))
  def MvLog(Sour_Dir,Desc_dir):
  Need_Mv_File_List=os.listdir(Sour_Dir)
  os.mkdir(Desc_dir)
  for item in Need_Mv_File_List:
  shutil.move(os.path.join(Sour_Dir,item),
  Desc_dir)

  def>  Shell_Command="{0} -s reopen".format(Nginx_Sbin)
  if os.system(Shell_Command)==0:
  print "nginx 日志已经重新加载"
  def Tar_Log_File(Log_Path,Tar_Dir):
  Tar_Bak_Name=os.path.normpath(os.path.join(Tar_Dir,
  "web1_{0}.tar.gz".format(Time_Day)))
  Tar=tarfile.open(Tar_Bak_Name,"w:gz")
  Tar.add(Log_Path,arcname=os.path.basename(Log_Path))
  Tar.close()
  shutil.rmtree(Log_Path)
  def Del_One_Old_File(Del_File_Dir,Check_Day=None):
  for root, dirs, files in os.walk(Del_File_Dir):
  files.sort(key=lambda fn: os.path.getctime(os.path.join(root, fn)))
  if Check_Day==True:
  OLd_File_Time_Day=datetime.datetime.fromtimestamp(os.path.getctime(os.path.join(root,
  files[0]))).strftime("%Y%m%d")
  Time_Now=time.strftime("%Y%m%d",time.localtime())
  S_Day=int(Time_Now)-int(OLd_File_Time_Day)
  return S_Day
  else:
  os.remove(os.path.normpath(os.path.join(root,files[0])))
  def Check_Ture_Or_Flase(Nginx_Bak_Dir,Bak_Days,Bak_Size):
  Nginx_Bak_Dir = os.path.normpath(Nginx_Bak_Dir)
  Size = 0
  for root, dirs, files in os.walk(Nginx_Bak_Dir):
  Size += sum([os.path.getsize(os.path.join(root, name)) for name in files])
  Mb_Size = '%.2f' % float(Size / 1024.0 / 1024.0)
  Mb_Max_Bak_Size = '%.2f' % float(Bak_Size * 1024)
  Flat = Del_One_Old_File(Nginx_Bak_Dir, True) > Bak_Days or float(Mb_Size) > float(Mb_Max_Bak_Size)
  return Flat
  def Check_Bak_Dir(Nginx_Bak_Dir,Bak_Days,Bak_Size):
  Flat=Check_Ture_Or_Flase(Nginx_Bak_Dir,Bak_Days,Bak_Size)
  while Flat:
  Del_One_Old_File(Nginx_Bak_Dir)
  Flat = Check_Ture_Or_Flase(Nginx_Bak_Dir, Bak_Days, Bak_Size)
  if Flat==False:
  break
  if __name__=="__main__":
  '''
  MvLog 移动当前文件
  ReloadNginxLog 从新加载nginx日志
  Tar_Log_File 打包日志文件
  Check_Bak_Dir 检查日志备份目录,是否需要删除备份日志
  '''
  MvLog(POSSIBLE_TOPDIR,Tmp_Work_File)
  ReloadNginxLog(Nginx_Pid_File)
  Tar_Log_File(Tmp_Work_File,Nginx_Bak_Dir)
  Check_Bak_Dir(Nginx_Bak_Dir,Nginx_Bak_Day,Nginx_Bak_Max_Size)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-546852-1-1.html 上篇帖子: Fedora上使用Python操作MongoDB学习笔记 下篇帖子: python读取/写入配置文件ini方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表