需求來源于實施團隊想要方便的看Nginx的error.log日志,時間長了現(xiàn)在這個文件都4個GB了,打開很困難。廢話少說,開始干活。網(wǎng)上提供了各種方案,試了幾個發(fā)現(xiàn)最直接的還是用定時任務(wù)執(zhí)行日志提取轉(zhuǎn)存的腳本比較方便了。| 做完了以后呢,他們還想讓各種xxxxx.access.log文件也都按日期分類,行吧,索性研究下腳本實現(xiàn)的通配大法。
首先編寫腳本 vim cut_nginx_log.sh
#!/bin/bash
#此腳本用于自動分割Nginx的日志,包括access.log和error.log
#每天00:00執(zhí)行此腳本 將前一天的access.log重命名為access-xxxx-xx-xx.log格式,并重新打開日志文件
#Nginx日志文件所在目錄
#date:20190619afternoon
LOG_PATH=/app/nginx1.12.1/logs/
#獲取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#獲取pid文件路徑
PID=/app/nginx1.12.1/logs/nginx.pid
#分割日志
#mv ${LOG_PATH}access.log ${LOG_PATH}accesslog/access-${YESTERDAY}.log
mv ${LOG_PATH}error.log ${LOG_PATH}errorlog/error-${YESTERDAY}.log
#再匹配歸檔各access文件
mkdir -p ${LOG_PATH}accesslog/${YESTERDAY}
for file in `ls ${LOG_PATH} | grep access.log`
do
mv ${LOG_PATH}$file ${LOG_PATH}accesslog/${YESTERDAY}/$file
done
#向Nginx主進程發(fā)送USR1信號,重新打開日志文件
kill -USR1 `cat ${PID}`
注意:反復執(zhí)行這個腳本會覆蓋已轉(zhuǎn)移的文件,因此首次執(zhí)行成功后,建議一定要重命名重要日志文件作為備份,免得幾個GB的日志數(shù)據(jù)消失了...我就干了這個事,幸虧Nginx有負載。。。
mkdir /app/nginx1.12.1/logs/errorlog/
chmod +x /app/nginx1.12.1/cut_nginx_log.sh
./cut_nginx_log.sh
看一下目錄下是否已經(jīng)存在了切割好的日志呢
有就說明成功了~
下面添加定時任務(wù),每天凌晨執(zhí)行一遍。
crontab -e
-----------------
0 0 * * * /bin/bash /app/nginx1.12.1/cut_nginx_log.sh
保存后即可~每天都會有按日產(chǎn)生的日志了