nginx 日志切割(脚本实现)

    这里主要介绍nginx日志切割.(访问日志与错误日志)

    准备好一台机器,配置随意,安装nginx应用。

    1. nginx安装步骤

  # tar xf nginx-1.9.4.tar.gz
  # cd nginx-1.9.4
  # yum install openssl-devel pcre pcre-devel –y
  # useradd -r -s /sbin/nologin nginx  
  # ./configure --user=nginx--group=nginx--prefix=/usr/local/nginx  --with-http_stub_status_module
     --with-http_ssl_module --with-stream && make && make install

    2. nginx配置文件

    user  nginx nginx;
    worker_processes  2;
    error_log  logs/error/error.log  info;
    pid        logs/nginx.pid;
    worker_cpu_affinity 00000001 00000010;
    events {
        use epoll;
        worker_connections  40960;
        multi_accept on;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format  main
                  '$http_x_forwarded_for - $remote_addr - $remote_user [$time_local] '
                  '$upstream_response_time $request_time '
                  '$http_host $request '
                  '"$status" $body_bytes_sent "$http_referer" '
                  '"$http_accept_language" "$http_user_agent" ';
        access_log logs/access/access.log    main;
        sendfile        on;
        keepalive_timeout  65;
        server_tokens off;
        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml;
        gzip_vary on;
     server {
            listen       80;
            server_name  localhost;
            location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

    3. 编写nginx切割脚本

    # vim nginx_logcut

    #!/bin/bash
    #description:cut nginx log per day.
    #auth:Net20 huangxiag
    #define logs dir
    LOGS_ACCESS="/usr/local/nginx/logs/access"
    LOGS_ERROR="/usr/local/nginx/logs/error"
    #define pid file
    PID_PATH="/usr/local/nginx/logs/nginx.pid"
    #define date
    DATE=`date -d "yesterday" +%F`
    DATE_DIR=`date +%Y-%m`
    #cut log
    if [ ! -d ${LOGS_ACCESS}/${DATE_DIR} ];then
        mkdir ${LOGS_ACCESS}/${DATE_DIR}
    fi
        mv ${LOGS_ACCESS}/access.log ${LOGS_ACCESS}/${DATE_DIR}/access_$DATE.log
    if [ ! -d ${LOGS_ERROR}/${DATE_DIR} ];then
        mkdir ${LOGS_ERROR}/${DATE_DIR}
    fi
        mv ${LOGS_ERROR}/error.log ${LOGS_ERROR}/${DATE_DIR}/error_$DATE.log
    #reload nginx
    kill -USR1 `cat ${PID_PATH}`

    4. 编写日志打包脚本

    # vim nginx_logtar.sh

    #!/bin/bash
    #description:tar nginx log per month &drop six month ago log.
    #auth:Net20  huangxiang
    #define logs dir
    LOGS_ACCESS="/usr/local/nginx/logs/access"
    LOGS_ERROR="/usr/local/nginx/logs/error"
    #define date
    DATE_DIR=`date -d "-1 month" +%Y-%m`
    DATE_SIX=`date -d "-6 month" +%Y-%m`
    #tar nginx log and drop six month ago log.
    if [ -d ${LOGS_ACCESS}/${DATE_DIR} ];then
        cd ${LOGS_ACCESS}
        tar -czvPf ${DATE_DIR}_log.tar.gz ${DATE_DIR}
        rm -fv ${DATE_DIR}/*
        rm -fv ${DATE_SIX}_log.tar.gz
    else
        echo "Last month access_log_dir was not exit."
    fi
    if [ -d ${LOGS_ERROR}/${DATE_DIR} ];then
        cd ${LOGS_ERROR}
        tar -czvPf ${DATE_DIR}_log.tar.gz ${DATE_DIR}
        rm -fv ${DATE_DIR}/*
        rm -fv ${DATE_SIX}_log.tar.gz
    else
        echo "Last month error_log_dir was not exit."
    fi

    5. 编写定时任务计划

    脚本都放在/root/bin下面(你们随意放,后面的定时任务别写错位置就好)

    脚本加执行权限。

    # crontab -l

    
00 00 * * * bash /root/bin/nginx_logcut.sh > /tmp/nginx_logcut.cron.log 2> /tmp/nginx_logcut.cron.err
00 00 1 * * bash /root/bin/nginx_logtar.sh > /tmp/nginx_logtar.cron.log 2> /tmp/nginx_logtar.cron.err

    6. 调整电脑时间

    调整操作系统时间为23:59:00

    记得访问下80,让nginx出日志。(还有随便访问一个404页面)

    7. 测试

    凌晨之后,查看是否已经日志切割。

    这里没给出具体测试结果,你们自己去整整。最主要的脚本已经给出

    

原创文章,作者:Net20_赤羽,如若转载,请注明出处:http://www.178linux.com/23380

(1)
上一篇 2016-07-10 01:03
下一篇 2016-07-10 12:16

相关推荐

  • 通过webGUI显示日志信息

         日志信息通常对于我们维护人员有着极为重要的意义,能够为我们提供故障排查、运维监控、历史操作记录等等很多必要的信息。为了方便此类信息的获取,我们可以搭建日志服务器,并实现webGUI显示以便更直观形象的观察收集它们。     一、拓扑图         &nbs…

    Linux干货 2015-07-15
  • M20 – 1- 第二周博客(2):Linux的文件系统与结构

    Linux系统对于一个初学者来说,其实并不那么容易.所以了解其系统的结构,及其表示的含义是非常重要的.否则安装好系统后,都无从下手.也不知道怎么办。下面介绍一下Linux 的目录结构.及每个目录表示的含义.方便初学者学习和使用Linux系统。 从上图可以看出Linux的目录结构属于树状型的,是否已经对Linux的结构有个大概的认识了呢,接下来讲的是这些目录中…

    Linux干货 2016-08-02
  • N26-博客作业-week5

    1、显示当前系统上root、fedora或user1用户的默认shell; ~]# grep -E “^((root|fedora|user1)\>)” /etc/passwd | cut -d: -f7 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); ~]#…

    Linux干货 2017-03-05
  • ThirdWeek_SecondDay

    Python学习笔记整理

    Linux干货 2017-10-09
  • 第十二周作业

    1、请描述一次完整的http请求处理过程;     1)建立或处理连接:接收请求或拒绝请求;     2)接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;接收请求的方式通常是并发访问响应模型;     3)处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息,解析后的报文…

    2017-03-27
  • 网络管理及其一些网络协议

    1,这周我们主要学的是有关网络的相关知识;下面我就介绍一下我感觉重要的一些内容。 首先介绍的是计算机网络协议的七层模型:从上到下依次分为:7,应用层(application):OSI模型的第七层,负责为操作系统或网络应用程序提供访问网络服务的接口。                …

    2017-09-02