一、切割脚本
#!/bin/bash
set -x -e
#定时任务零点执行该脚本,比如"0 0 * * * /bin/bash /data/logs/nginx/nginx_log_cut.sh &> /dev/null"
#nginx日志文件所在的目录
NGINX_LOGS_DIR=/usr/local/nginx/logs
#日志保留天数,默认90天
LOGS_SAVE_DAYS=90
cd ${NGINX_LOGS_DIR}
[ -d bak ] || mkdir bak
NGINX_MASTER_PID=`ps -ef | grep nginx | grep master |awk '{print $2}'`
YESTERDAY=$(date +%Y-%m-%d -d "-1 day")
for log in $(ls *.log);
do
## 移动文件
mv ${log} bak/${log}.${YESTERDAY}
done
## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 ${NGINX_MASTER_PID}
cd bak
tar -zcf nginx_${YESTERDAY}.log.tar.gz *.log.${YESTERDAY} --remove-files
#删除指定天数以前的日志
find . -name "*.log.tar.gz" -type f -mtime +${LOGS_SAVE_DAYS} -exec rm -rf {} \;
二、添加定时任务
echo -e "#每天凌晨00:00切割nginx日志\n0 0 * * * /bin/bash /usr/local/nginx/nginx_log_cut.sh &> /dev/null" >> /var/spool/cron/root