nginx日誌定時切割

    關於nginx日誌定時切割、一般有兩種方案,第一用logrotate,它是一個linux系統日誌的管理工具、它可以切割、壓縮等其他軟件的日誌文件軟件;logrotate是基於crontab運行的,所以這個時間點是由crontab控制的,具體可以查詢crontab的配置文件/etc/anacrontab。第二種用shell腳本定時切割。

    第一種方案:logrotate

        1、安裝logrotate,我這裏是centos直接用:yum -y install logroate

        2、安裝成功後、配置logrotate。/etc/logrotate.conf是logrotate的配置文件,打開該文件內容,顯示如下:

wKiom1eJqGbh2LkNAAN1aaCBY5k668.png-wh_50

標紅處很關鍵,引入文件用的,所以我在該引入目錄下新建了一個nginx文件,內容如下:

/var/log/nginx/access/*.log {
    #按天切割
    daily
    #在日誌輪循期間,任何錯誤將被忽略
    missingok
    #一次存儲30個日誌文件。對於第31個日誌文件,時間最久的那個日誌文件將被刪除。
    rotate 30
    #按日期格式顯示切割後的文件名
    dateext
    dateformat _%Y-%m-%d
    #不採用壓縮
    #compress
    #delaycompress
    #文件爲空時不進行轉存
    notifempty
    #以指定的權限和用書屬性,創建全新的日誌文件,同時logrotate也會重命名原始日誌文件。
    create 755 web web
    sharedscripts
    postrotate
        kill -USR1 `ps aux | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
        sh /var/www/webroot/nginxlogrotate/access_log_archive.sh
    endscript
}

附日誌歸檔腳本/var/www/webroot/nginxlogrotate/access_log_archive.sh內容:

#/bin/sh
lib_path="/var/log/nginx/archive/"
date_path="`date +%Y`/`date +%m`/`date +%d`"
path="${lib_path}${date_path}"
if [ ! -d "${path}" ]; then
    mkdir -p "${path}"
fi
chmod -R 777 ${path}
suffix_date=`date +%Y-%m-%d`
#日誌列表
log_list=(ds img koubei shanghu static wl wx super m fc mantis)
#重命名日誌文件
for i in ${log_list[@]};
do
    if [ -f "/var/log/nginx/access/${i}.log_${suffix_date}" ];then
        mv "/var/log/nginx/access/${i}.log_${suffix_date}" "${path}/${i}.log"
        rm -f "/var/log/nginx/access/${i}.log_${suffix_date}"
    fi
done


配置完成這些以後,還有一個很關鍵的配置文件,/etc/anacrontab,內容如下:

wKiom1eJ4nTQxFSsAAMjem4mNjk053.png-wh_50

標紅處我將定時任務運行的時候改爲0=23點,然後自定義cron.daily的執行時間爲每天的23:59,如此這般每天即可成功運行。

二、shell腳本

#!/bin/bash
#設置日誌文件存放目錄
log_path="/usr/local/nginx/log/"
#設置pid文件
pid_path="/usr/local/nginx/nginx.pid"
#日誌列表
log_list=(ds img koubei shanghu static wl wx super m fc)
#重命名日誌文件
for i in ${log_list[@]};
do
    #echo ${log_path}${i}_$(date -d "yesterday" +"%Y%m%d").log
    mv ${log_path}${i}.log ${log_path}${i}_$(date -d "yesterday" +"%Y%m%d").log
done
#向nginx主進程發信號重新打開日誌
kill -USR1 `cat ${pid_path}`


然後創建定時任務即可,定時任務可以參考我之前的文章
crontab妙用



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章