nginx没有像logback一样日志自动按天切割的功能,如果不切割的话,单个的日志会越来越大。
需求:实现nginx按天切割,并且自动删除20天后的日志文件。
思路:创建切割脚本并且定时执行该脚本。
步骤:
1:创建切割脚本,cut_nginx.sh
#!/bin/bash
LOGS_PATH=/data/log/nginx
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#按天切割日志
mv ${LOGS_PATH}/equipment_test/access.log ${LOGS_PATH}/equipment_test/access_${YESTERDAY}.log
mv ${LOGS_PATH}/default/access.log ${LOGS_PATH}/default/access_${YESTERDAY}.log
mv ${LOGS_PATH}/default/error.log ${LOGS_PATH}/default/error_${YESTERDAY}.log
mv ${LOGS_PATH}/launcher-cn-api/access.log ${LOGS_PATH}/launcher-cn-api/access_${YESTERDAY}.log
mv ${LOGS_PATH}/launcher_test/access.log ${LOGS_PATH}/launcher_test/access_${YESTERDAY}.log
mv ${LOGS_PATH}/mbrowers_test/access.log ${LOGS_PATH}/mbrowers_test/access_${YESTERDAY}.log
mv ${LOGS_PATH}/platform_test/access.log ${LOGS_PATH}/platform_test/access_${YESTERDAY}.log
mv ${LOGS_PATH}/projectm/access.log ${LOGS_PATH}/projectm/access_${YESTERDAY}.log
mv ${LOGS_PATH}/stream-cn-api/access.log ${LOGS_PATH}/stream-cn-api/access_${YESTERDAY}.log
#向nginx主进程发送USR1信号,重新打开日志文件,否则会继续往mv后的文件写数据的
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#保存20日志
find /data/log/nginx/ -mtime +20 -name "*.log" -exec rm -rf {} \;
2:定时执行
vi /etc/crontab
0 0 * * * root /data/log/cut_nginx.sh
注意:配置完后都需要重启下crontab使之生效
使用 /etc/init.d/crond restart
或者service crond restart(Centos7下为systemctl restart crond)