Nginx有 access.log 和 error.log 兩個日誌文件,當然文件名稱是通過Nginx的conf文件進行配置的,不一定完全一樣。隨着項目的運行,這兩個日誌文件佔用的磁盤空間會越來越大,查詢效率越來越低,又不能直接刪除,不方便管理。這裏我們提供一個腳本,在不用變更配置文件的情況下,每天凌晨對前一天的日誌按日期進行重命名進行保存,新一天的日誌繼續寫入新的文件。
1 腳本
#!/bin/bash
#此腳本用於自動分割Nginx的日誌,包括access.log和error.log
#每天00:00執行此腳本 將前一天的日誌移動到按日期命名的目錄(如20210518)中,並重新打開日誌文件
#nginx日誌文件目錄
LOG_PATH=/home/work/project/log/
STORAGE_PATH="${LOG_PATH}nginx"
YESTERDAY_PATH="${STORAGE_PATH}"/$(date -d "yesterday" +%Y%m%d)
if [ ! -d "${STORAGE_PATH}" ]; then
mkdir "${STORAGE_PATH}"
fi
if [ ! -d "${YESTERDAY_PATH}" ]; then
mkdir "${YESTERDAY_PATH}"
fi
#pid文件路徑
PID=//home/work/canghai/var/nginx.pid
#轉移日誌
mv ${LOG_PATH}access.log ${YESTERDAY_PATH}/access.log
mv ${LOG_PATH}error.log ${YESTERDAY_PATH}/error.log
#向nginx主進程發送USR1信號,重新打開日誌文件
kill -USR1 `cat ${PID}`
2 部署
我們把該腳本放到服務器上,對其設置執行權限,把執行命令添加到crontab就行,每天0點執行一次。
00 00 * * * sh /some/path/nginx_log.sh