zoukankan      html  css  js  c++  java
  • nginx 日志切割

    概述

    nginx  日志一般都是两种access.log   error.log ,可以每个location 区域配置一份,也就是每个请求服务一个日志。它的日志不会自动切割,需要人为根据时间或者日志量切割。

    脚本完成nginx日志切割

    vi /opt/nginx/cut_nginx_log.sh
      #!/bin/bash
      #此脚本用于自动分割Nginx的日志,包括access.log和error.log
      #每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx-xx.log格式,并重新打开日志文件
      LOG_PATH
    =/opt/nginx/logs                        #Nginx日志文件所在目录   YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)             #获取昨天的日期   PID=/var/run/nginx/nginx.pid                      #获取pid文件路径   mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log #分割日志   mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log   kill -USR1 `cat ${PID}`                        #向Nginx主进程发送USR1信号,重新打开日志文件

    制作计划任务

    crontab -e
    # 输入以下内容并保存
    00 00 * * * /bin/bash /opt/nginx/sbin/cut_nginx_log.sh

    关于kill -USR1

    nginx 的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项设置的值,如果文件不存在,会自动创建一个新的文件xx.log)。 然后把日志文件的拥有者改为“工作进程(worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行,所以需要改变拥有者)

    nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成xxx.log-$date.log的文件),并通知工作进程使用新打开的日志文件(刚才主进程打开的文件xxx.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开日志文件(也就是配置文件中约定的xxx.log)

    如果不运行此命令,即使access.log 已经改名为access-xxxxx.log 了但是nginx 还是会把日志写入access-xxxx.log 因为日志文件名字变了但是inode 等信息不变,所以不会自动把新日志写入access.log

    拓展

    日志切割有一个工具 logrotate,可以通过安装此工具来切割日志

  • 相关阅读:
    南京的第一场雪 沧海
    再一则笑话家里闹鬼了 沧海
    简单需求描述(自己备用) 沧海
    为什么IIS无法启动,以前是可以了.而且WWW服务也启动不了提示:错误127,找不到指定程序. 沧海
    生活中有着太多的感动 沧海
    Enhancements 沧海
    ABAP SysteTransactions, Tables and Programs 沧海
    SAP ABAP OK Code Values 沧海
    Conversion of SAPSCRIPT to SMARTFORMS 沧海
    别人的面试记实转摘 沧海
  • 原文地址:https://www.cnblogs.com/fanggege/p/13192586.html
Copyright © 2011-2022 走看看