nginx日誌切割及刪除7天前的曆史日誌shell指令碼

來源:互聯網
上載者:User

例子一、按日期切割nginx日誌,並自動刪除7天前的日誌(日誌均已同步至專用日誌儲存伺服器,可放心刪除曆史日誌。)

#!/bin/bash
#初始化
LOGS_PATH=/data/nginx/logs/www.domain.com
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#按天切割日誌
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
#向 Nginx 主進程發送 USR1 訊號,重新開啟記錄檔,否則會繼續往mv後的檔案寫內容,導致切割失敗.
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#刪除7天前的日誌
cd ${LOGS_PATH}
find . -ctime +7 -name "*20[1-9][3-9]*" | xargs rm -f
exit 0

將這個指令碼添加到計劃任務,每天執行一次即可:

1 0 * * * /usr/local/script/cut_del_logs.sh

此方法,網上一搜一大把,因此本文僅作為個人工作記錄,並非教程,隨便看看就行,別太在意。

例子2、按天分類儲存並刪除超過7天的日誌

指令碼內容:

#!/bin/bash
# a nginx access log segmentation shell script

cd /data/wslogs
log_dir="/data/wslogs"
time=`date +%Y%m%d`
nginx_dir="/usr/local/webserver/nginx"

#日誌分割,按天分類
website=`ls $log_dir/access* | xargs -n 1 | cut -f 2 -d "."`
for i in $website
do
  mkdir -p $log_dir/backup/$time/$i
  mv $log_dir/access.$i.log $log_dir/backup/$time/$i/$time.log
done
$nginx_dir/sbin/nginx -s reload

#刪除所有超過7天日誌。
if [ "`date +%a`" = "Sun" ]; then
  all_list=`ls $log_dir/backup | xargs -n 1`
  for del in $all_list
  do
    let results=$time-$del
    if [ $results -gt 7 ]; then
      rm -fr $log_dir/backup/$del
    fi
  done
fi

需要注意的是:因為個人需要,Nginx訪問日誌命名格式必須是access.網域名稱.log,例如:access.www_1987_com.log,網域名稱中原來的點.必須換成其他字元,比如底線_

代碼中的一些位置參數可以根據自己需要修改,修改/etc/crontab檔案,加入00 00 * * * root /data/logcron.sh,每天零點執行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.