Nginx日志切割脚本

[ 2010-12-14 20:07:19 | 作者: admin ]
字号: | |
使用logrotate:

vi /etc/logrotate.d/nginx

/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/awstats/tools/awstats_buildstaticpages.pl -update -config=www.sasacity.com -dir=/app/public/awstats/data/ -lang=cn -configdir=/usr/local/awstats/wwwroot/cgi-bin/ -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.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
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=1609

这篇日志没有评论。

此日志不可发表评论。