zoukankan      html  css  js  c++  java
  • nginx 日志文件分隔

    Nginx命令

    Nginx命令帮助如下

    nginx -h

    nginx version: nginx/0.8.45

    Usage: nginx [-?hvVt] [-s signal] [-c filename] [-p prefix] [-g directives]

    Options:

      -?,-h         : this help   // 帮助

      -v            : show version and exit // 显示版本

      -V            : show version and configure options then exit // 显示版本及配置选项

      -t            : test configuration and exit // 测试配置文件,非常重要

      -s signal     : send signal to a master process: stop, quit, reopen, reload // 发送信号

      -p prefix     : set prefix path (default: /opt/nginx-0.8.45/)

      -c filename   : set configuration file (default: conf/nginx.conf) // 指定配置文件

      -g directives : set global directives out of configuration file

    wps_clip_image-10198

    上图是nginx官方网站对nginx信号的解释文档截取

    下面是一些常见nginx命令

    nginx -c /path/to/nginx.conf  // 以特定目录下的配置文件启动nginx:

    nginx -s  reload  // 修改配置后重新加载生效

    nginx -s  reopen   // 重新打开日志文件

    nginx -s stop  // 快速停止nginx

    nginx -s quit  // 完整有序的停止nginx

    nginx -t     // 测试当前配置文件是否正确

    nginx -t -c /path/to/nginx.conf  //测试特定的nginx配置文件是否正确

    Nginx日志切割

    为什么要切割日志?一般Nginx安装好后有些人会打开日志记录,有些人会关闭日志记录,打开日志记录的人一般都会把架设在Nginx上的所有网站日志都存在同一个文件里(比如我存在access.log日志文件里),这样日积月累所有网站的访问记录就会把日志文件越积越大,当需要查看日志文件的时候一看就是一大串,不方便查找。现在,如果我把每天的日志文件分割开来用相应的日期标识出来这样就大大方便查找了。

    我是建议打开日志记录,日志记录里面存放着很多有用的东西。比如:浏览器名称,可以方便你对网站的排版做出调整;IP地址,如果网站收到攻击,你就可以查到那个IP地址。

    Linux下我们可以简单的把日志文件mv走,但是你会发现mv走后新的日志文件没有重新生成,一般linux下用的文件句柄,文件被打开情况下你mv走文件,但是原来操作这个文件的进程还是有这个文件的inode等信息,原进程还是读写原来的文件,因此简单的mv是无法生效的。

    因此建议过程如下

    1. mv原文件到新文件目录中,这个时候 nginx还写这个文件(写入新位置文件中了)

    2. 调用nginx -s  reopen用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中

    这样完成了日志的切割工作, 同时切割过程中没有日志的丢失

    1 编写 shell 脚本

    #!/bin/bash
    
        LOGS_PATH=/usr/local/nginx/logs
        YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
        mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
        mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
    
        # 以下任选其一
        /usr/local/nginx/sbin/nginx -s reopen
        # 或者
        # kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

    该脚本以天为单位分割,使用 reopen 信号重新配置日志,或者向 nginx 主进程发送 usr1 信号。
    命名为 NginxLogRotate.sh,保存到目录 /usr/local/nginx/logs

    2 设置定时任务

    新建 crontab 任务:

    crontab -e

    编辑文件,每天 00:00 以 root 身份执行脚本

    0 0 * * * root /usr/local/nginx/logs/nginxLogRotate.sh

    nginx -s  reload 命令加载修改后的配置文件,命令下达后发生如下事件

    1. Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作(因为worker未受到影响)

    2. Nginx启动新的worker进程,采用新的配置文件

    3. Nginx将新的请求分配新的worker进程

    4. Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程

    5. 重复上面过程,知道全部旧的worker进程都被关闭掉

  • 相关阅读:
    全局上下文(GO)
    重写数组拓展方法
    spring + spring mvc 使用 maven 编译出现异常
    shiro 配置注解后无权访问不进行页面跳转异常:org.apache.shiro.authz.UnauthorizedException: Subject does not have permission
    shiro 配置注解异常 java.lang.ClassNotFoundException: org.aspectj.util.PartialOrder$PartialComparable
    kaptcha 配置
    maven 安装 jar 包
    jsp 页面 javax.servlet.jsp.JspException cannot be resolved to a type 异常
    操作系统下载地址
    java file 常用操作
  • 原文地址:https://www.cnblogs.com/alter888/p/9450937.html
Copyright © 2011-2022 走看看