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)
Net20_赤羽Net20_赤羽
上一篇 2016-07-10
下一篇 2016-07-10

相关推荐

  • Linux系统性能工具

    linux中几款常用的系统性能分析工具: 1.vmstat命令 解释: 虚拟内存信息 用法: vmstat [options] [delay [count]] vmstat 2 5 //每2秒刷新一次,一共刷新5次 输出属性: procs: r:可运行(正运行或等待运行)进程的个数,和核心数有关 b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度) mem…

    Linux干货 2017-12-19
  • 数据结构-栈和队列

    1.栈 1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),简称为LIFO线性表。 栈的基本运算有六种: 构造空栈:InitStack(S)、 判栈空: StackEmpty(S)、 判栈满: StackFull(S)、 …

    Linux干货 2015-04-07
  • 用户和组管理 第三周

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d' ' -f1 | sort -u who:查看当前已经登陆的所有用户的详细信息 cut -d ' ' -f1:以空格为界显示每行第一列 sort -u :在输出行中去除重复行。 2、取出最后登录到当前系…

    Linux干货 2017-02-13
  • Linux Cluster之keepalived及keepalived + LVS DR的实现

      一、HA Cluster基础 系统可用性A=MTBF/(MTBF+MTTR) MTBF:平均无故障时间 MTTR:平均修复时间 降低MTTR的方式:冗余(redundent) 衡量标准:几个9 90%、99%、99.9%… 提升系统可用性的办法之一:降低MTTR 通过冗余(redundant)的方式能够避免单点故障(SPoF),从而…

    2016-11-02
  • linux网络属性命令操作介绍(第十一天)

            linux网络属性常用命令有ifconfig\route\ip命令,centos7 的还是nmcli\nmtui。     网络属性的三大文件:修改DNS的文件/etc/resolv.conf  、修改网卡IP地址/etc/sysconfig/…

    Linux干货 2016-06-01
  • 马哥教育网络班21期+第一周课程练习

    1,描述计算机的组成及其功能。 2.按系列罗列linux的发行版,并描述不同发行版之间的练习与区别。 3.描述linux的哲学思想,并按照自己的理解对其进行解释性描述。 1.       一切皆文件,计算机中所有的文件目录,        包括计算机的硬件设备显示为文件格式。 2…

    Linux干货 2016-07-07