前幾天查看了下nginx的日志文件access.log,發(fā)現(xiàn)居然有二十幾個(gè)G了展懈!
于是準(zhǔn)備使用Shell腳本的方式對(duì)nginx日志文件按天進(jìn)行切割
編寫腳本
新建一個(gè)腳本文件,這里我在nginx日志目錄中新建了一個(gè)cut_log.sh
cd /usr/local/nginx/logs
vi cut_log.sh
開始腳本內(nèi)容的編寫
#!/bin/bash
##零點(diǎn)執(zhí)行該腳本
##nginx日志文件所在的目錄
LOGS_PATH=/usr/local/nginx/logs
##獲取昨天的yyyy-MM-dd
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
##移動(dòng)文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
##向nginx主進(jìn)程發(fā)送USR1信號(hào)珊膜,USR1信號(hào)是重新打開日志文件
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
##刪除7天前的日志
cd ${LOGS_PATH}
find . -mtime +7 -name "access_*" | xargs rm -f
exit 0
可以看出Shell腳本中做了兩件事,1珠月、按天切割nginx日志2捞蛋、刪除7天前的nginx日志
定時(shí)執(zhí)行
由于我們要實(shí)現(xiàn)按天切割的功能也颤,所以需要在crontab中設(shè)置定時(shí)任務(wù),每天零點(diǎn)執(zhí)行
vi /etc/crontab
添加如下內(nèi)容
#nginx日志切割
0 0 * * * root /bin/sh /usr/local/nginx/logs/cut_log.sh
為了測(cè)試查看切割效果碳却,可以把定時(shí)任務(wù)中的切割時(shí)間改為一個(gè)較近的時(shí)間队秩,關(guān)于crontab的配置指南戳這里
最后總結(jié)一下使用Shell腳本切割日志的原理,由于我們是按天進(jìn)行切割昼浦,所以在每天零點(diǎn)的時(shí)候執(zhí)行切割腳本馍资,獲取昨天的日期(比如2017-09-08),然后將當(dāng)前日志文件(access.log)重命名為以日期為后綴的日志文件(比如access_2017-09-08.log)关噪,然后需要通知nginx重新生成日志文件access.log鸟蟹,然后再第二天零點(diǎn)再重復(fù)同樣的動(dòng)作,這樣就實(shí)現(xiàn)了按天切割的功能