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 12:15
下一篇 2016-07-10 12:15

相关推荐

  • Linux初识

    Linux 初识 计算机包含 CPU :运算器 、控制器、寄存器、缓存(加速) 存储器:内存,RAM(Random Access Memory) Input:下指令,提供数据 Output:输出数据加工的结果。 冯诺依曼体系 纸带打孔 磁带机 批处理 键盘、显示器 多任务Multi task 虚拟机软件 VMware workstation 12 PRO O…

    2017-07-13
  • Linux基础知识之命令的语法通用格式

    #COMMAND OPTIONS ARGUMENTS 1.COMMAND:   (1)发起一命令:请求内核将某个二进制程序运行为一个进程: 程序–>进程 静态–>动态 (有声明周期)   (2)命令本身是一个可执行的程序文件:二进制格式的文件,有时候会调用共享库文件 多数系统程序文件都存放在:/bin,…

    Linux干货 2016-07-07
  • CentOS7.3安装Jumpserver0.3.2

    CentOS7.3安装Jumpserver0.3.2 公司服务器前端增加堡垒机,选用开源的jumpserver 软件环境CentOS Linux release 7.3.1611 python 2.7.5 mysql5.7 安装git yum -y install git 克隆jumpserver # cd /opt # git clone https://…

    Linux干货 2017-07-11
  • N25-Week9

    1. 写一个脚本,判断当前系统上所有用户的shell是否为可登陆shell(即用户的shell不是/sbin/nologin);分别统计这两类用户的个数,通过字符串比较来实现 #! /bin/bash#写一个脚本,判断当前系统上所有用户的shell是否为可登陆shell(即用户的shell不是/sbin/nologin);#分别统计这两类用户的个数#通过字符…

    Linux干货 2017-03-10
  • N26-第五周博客作业

    一、显示当前系统上root、fedora或user1用户的默认shell; [root@promote home]# grep -E ‘^(root|fedora|user1)’ /etc/passwd |cut -d : -f7 /bin/bash /bin/bash /bin/bash [root@promote home]# 注…

    Linux干货 2017-05-15
  • Linux文本处理工具grep,egrep

    简介:     grep即(Global search REgular expression and Print out the line)全局的搜索正则表达式并且打印显示出来。     通俗点讲:根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。 &n…

    Linux干货 2015-05-11