nginx日志自動切割方法


說明:日志配置

Nginx 日志分文件有以下兩個:

access.log 記錄哪些用戶,哪些頁面以及用戶瀏覽器,IP等訪問信息;

error.log 記錄服務器錯誤的日志;

一、利用腳本日志切割(按天進行日志切割)

以下腳本任選一個就行;

A.編寫腳本

#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
logs_backup_path="/usr/local/nginx/logs_backup/$year$month"               #日志存儲路徑

logs_path="/usr/local/nginx/logs/"                                        #要切割的日志路徑
logs_access="access"                                                      #要切割的日志
logs_error="error"
pid_path="/usr/local/nginx/logs/nginx.pid"                                 #nginx的pid

[ -d $logs_backup_path ]||mkdir -p $logs_backup_path
rq=`date +%Y%m%d`
#mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log
mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
B.編寫腳本

#! /bin/bash
## 假設nginx的日志存放路徑為/data/logs/
d=`date -d "-1 day" +%Y%m%d`   生成昨天的日期
logdir="/data/logs"   定義存放位置
nginx_pid="/usr/local/nginx/logs/nginx.pid" 定義位置,找他的pid
cd $logdir 進入目錄下
for log in `ls *.log`  做個for循環
do    
   mv $log $log-$d   做一個改名操作
done
/bin/kill -HUP `cat $nginx_pid`  重新加載一下,生成新的日志文件

設置定時任務

# crontab –e
59 23 * * * bash /usr/local/nginx/cut_ngnix_log.sh   #每天23:59分開始執行;

 二、利用logrotate管理日志

(1)默認centos系統安裝自帶logrotate,軟件包信息說明;

# rpm -ql  logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf  # 主配置文件
/etc/logrotate.d   # 配置目錄

(2)使用Logrorate切割日志

# vim /etc/logrotate.d/nginx 
/var/log/nginx/*.log     #此處為nginx存儲日志的地方;
 {
    daily                    #指定轉儲周期為每天
    rotate 30                #轉儲次數,超過將會刪除最老的那一個
    missingok                #如果日志文件丟失,不要顯示錯誤
    compress                 #通過gzip 壓縮轉儲以后的日志
    delaycompress            #當前轉儲的日志文件到下一次轉儲時才壓縮
    notifempty               #當日志文件為空時,不進行輪轉
    postrotate               #執行的指令
      if [ -f /var/run/nginx/nginx.pid ]; then
          kill -USR1 `cat /var/run/nginx/nginx.pid`
      fi
endscript                   #PID路徑根據實際路徑填寫;
}

(3)保存好配置文件后,測試效果:

# logrotate -vf /etc/logrotate.d/nginx 
access.log  access.log.1  error.log  error.log.1

(4)定時任務執行

#crontab –e
0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx #每天凌晨00:00自動執行日志切割任務;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM