nginx日誌檔案按天記錄定時清理迴圈記錄

一級碼農VIP發表於2021-05-19

問題

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:~#

相關文章