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.www58058.com/23380

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

相關推薦

  • 網絡管理1

    一、知識整理 1、路由轉發:拆除第一層MAC地址,根據IP地址廣播,收到信號后重新封裝。一個路由器連接多個廣播域,一個交換機連接多個沖突域。 2、網絡用戶應用程序:WEB瀏覽器;即時消息;電子郵件;協作(視頻會議,vnc);web網絡服務;文件網絡服務;數據庫服務;中間件服務(Tomcat);安全服務(netfilter)。 3、HDR:報頭。Frame C…

    Linux干貨 2016-09-05
  • 第二周作業

    新建 Microsoft Word 文檔.docx

    Linux干貨 2016-12-13
  • SSH原理與運用:遠程登錄

    如果本地用戶名與遠程用戶名一致,登錄時可以省略用戶名。 1 $ ssh host SSH的默認端口是22,也就是說,你的登錄請求會送進遠程主機的22端口。使用p參數,可以修改這個端口。 1 $ ssh –p 2222 user@host 上面這條命令表示,ssh直接連接遠程主機的2222端口。 三、中間人攻擊 SSH之所以能夠保證安全,原因在于它…

    Linux干貨 2017-08-14
  • 文件管理相關

     rename:對文件重命名     rename [options] expression replacement file        示例:          # rename -v cut.exe cut.exe3 cut.exe…

    Linux干貨 2017-02-25
  • 馬哥教育20期面授2班第一周課程練習1

    計算機基礎   1,計算機系統           硬件系統            主機部分:中央處理器CPU(運算器ALU、控制器CU);  &nb…

    Linux干貨 2016-07-29
  • Mysql 報錯解決–PID file could not be found!

    今天想把之前在cetnos6上編譯安裝的mariadb改下PATH環境變量,操作幾次之后,關閉或重啟mysql就失敗了,提示如下: [root@web1 ~]# service mysqld stop MySQL server PID file could not&nb…

    系統運維 2016-09-19
欧美性久久久久