首页 > 系统管理 > Nginx日志切割脚本

Nginx日志切割脚本

2009年1月9日

使用logrotate:

vi /etc/logrotate.d/

/usr/local/nginx/logs/*.access.log error.log{
daily
missingok
#保留365个log
rotate 365
compress
#延后压缩
delaycompress
#无文件不压缩
notifempty
#创建的文件权限设置为644,用户组nobody:root
create 644 nobody root
#多个文件脚本轮换只执行一次
dateext
#在文件末尾添加当前日期
olddir /usr/local/nginx/logs/backlog/
#把备份文件拷贝到老目录,防止再次备份
sharedscripts
prerotate
#rotate之前sleep59秒
sleep 59
endscript
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
/usr/local//tools/_buildstaticpages.pl -update -config=www.sasacity.com -dir=/app/public//data/ -lang=cn -configdir=/usr/local//wwwroot/cgi-bin/ -awstatsprog=/usr/local//wwwroot/cgi-bin/.pl
endscript
}
调试脚本用
/usr/sbin/logrotate -d /etc/logrotate.d/nginx
使用无误后执行一下看看
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
如果执行没有问题,编辑 /etc/crontab,把cron.daily的运行日期改到每天晚上23点59分执行(注意到我们在脚本中sleep了59秒):
59 23 * * * root run-parts /etc/cron.daily

这个方法的缺点是dateext无法自动定制格式,如果文件很多,我们需要放在2008/05/, 2008/06/, 2008/07/这样的目录结构,因此我编写了以下脚本,供参照:
vi /usr/local/nginx/sbin/cut_nginx_log.sh
logs_path="/usr/local/nginx/logs/"
logfiles="www.access.log blog.access.log host.access.log error.log"

server=`hostname`
date=$(date -d "yesterday" +"%Y%m%d")
save_path=${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
mkdir -p ${save_path}

for log in ${logfile};
do mv ${logs_path}/${log} ${save_path}/${log}.${date}.${server};
done

kill -USR1 `cat /var/run/nginx.pid`

for log in ${logfile};
do gzip ${save_path}/${log}.${date}.${server};
done

添加cronjob
crontab -e
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh

VN:F [1.9.22_1171]
Rating: 8.5/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Nginx日志切割脚本, 8.5 out of 10 based on 2 ratings

系统管理 , ,

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

This blog is kept spam free by WP-SpamFree.