需求来源于实施团队想要方便的看Nginx的error.log日志,时间长了现在这个文件都4个GB了,打开很困难。废话少说,开始干活。网上提供了各种方案,试了几个发现最直接的还是用定时任务执行日志提取转存的脚本比较方便了。| 做完了以后呢,他们还想让各种xxxxx.access.log文件也都按日期分类,行吧,索性研究下脚本实现的通配大法。
首先编写脚本 vim cut_nginx_log.sh
#!/bin/bash
#此脚本用于自动分割Nginx的日志,包括access.log和error.log
#每天00:00执行此脚本 将前一天的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主进程发送USR1信号,重新打开日志文件
kill -USR1 `cat ${PID}`
注意:反复执行这个脚本会覆盖已转移的文件,因此首次执行成功后,建议一定要重命名重要日志文件作为备份,免得几个GB的日志数据消失了...我就干了这个事,幸亏Nginx有负载。。。
mkdir /app/nginx1.12.1/logs/errorlog/
chmod +x /app/nginx1.12.1/cut_nginx_log.sh
./cut_nginx_log.sh
看一下目录下是否已经存在了切割好的日志呢
有就说明成功了~
下面添加定时任务,每天凌晨执行一遍。
crontab -e
-----------------
0 0 * * * /bin/bash /app/nginx1.12.1/cut_nginx_log.sh
保存后即可~每天都会有按日产生的日志了