nginx日志文件按天記錄定時清理循環記錄


問題

nginx日志默認記錄在一個文件access.log中,時間長了會導致日志文件特別大,甚至磁盤占滿。

解決方案

使用以下方法,將access.log文件每天一個,然后清過15天以前的文件。

方法

創建clearNginxLog.sh文件

#!/bin/bash

LOG_PATH="/data/nginx/log/"
save_days=1
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
echo "———————————————–"
echo "運行時間:[$(date +"%Y-%m-%d %H:%M:%S")]"
#刪除指定日期以前的文件
echo "刪除[$save_days]天以前的日志文件"
#find $LOG_PATH -mtime +$save_days -exec rm -rf {} \;
find $LOG_PATH -mtime +$save_days -type f -name \*.log | xargs rm -f

# 循環文件重命名
echo "循環文件重命名"
#for f in $LOG_PATH*.log; do cp $f ${f%.html}.php; done
for var in $LOG_PATH*.log; do mv "$var" "${var%.log}_$YESTERDAY.log"; done

#向nginx主進程發送USR1信號,重新打開日志文件,否則會繼續往mv后的文件寫數據的。原因在於:linux系統中,內核是根據文件描述符來找文件的。如果不這樣操作導致日志切割失敗。
echo "向nginx發送信號"
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`

echo "清理完成"
echo "———————————————–"

將文件上傳到服務器上,
然后在crontab中添加任務
crontab -e
每天0點執行
0 0 * * * /data/nginx/conf/clearNginxLog.sh >> /var/log/clearNginx.log 2>&1

:q!退出
:wq保存退出

然后重啟crontab服務
root@castle:~# /etc/init.d/cron restart
[ ok ] Restarting cron (via systemctl): cron.service.
root@castle:~#


免責聲明!

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



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