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

Nginx日志切割脚本

2009年1月9日

使用logrotate:

vi /etc/logrotate.d/

/usr/local//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//logs/backlog/
#把备份文件拷贝到老目录,防止再次备份
sharedscripts
prerotate
#rotate之前sleep59秒
sleep 59
endscript
postrotate
if [ -f /var/run/.pid ]; then
kill -USR1 `cat /var/run/.pid`
fi
/usr/local//tools/awstats_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/
使用无误后执行一下看看
/usr/sbin/logrotate -f /etc/logrotate.d/
如果执行没有问题,编辑 /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//sbin/cut_nginx_log.sh
logs_path="/usr/local//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/.pid`

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

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

相关文章:

  1. 软件使用和目录设置规范
  2. Nginx下设置运行Awstats
  3. Awstats安装和配置
  4. Web日志分析
  5. nginx简单配置文件

inetdemon 系统管理 , ,

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

Spam Protection by WP-SpamFree