logrotate实现多站点nginx日志切割
nginx日志默认生成在指定的一个文件日志里,久而久之文件会越来越大不利于查看和管理
目前有以下几个方案可以进行nginx日志的切割:
一、安装修改版本的nginx,可实现日志自动按天记录。不过此方法需要重新编译nginx,不适合现有业务进行操作
二、配置shell脚本,当前网上最普遍的方法。不过此方法一个脚本只支持一个日志的切割,并不适合多个站点的切割。 多个站点日志切割需要逐个配置域名,相应的有python脚本实现方式,也只是将shell脚本改为python脚本格式。
三、logrotate方式切割日志,系统自动执行,可对日志进行压缩,目前认为是最好的方式。
#vi /etc/logrorate.d/nginx
配置如下:
/data/wwwlogs/*nginx.log { #多个目录可空格隔开
daily #每日执行
rotate 31 #保留31个日志
missingok #跳过不存在的日志
dateext #以日期为结尾重命名日志文件
compress
notifempty
sharedscripts
postrotate #只执行一次下面的脚本
[ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
每天执行的时间由cron管理,测试大部分在凌晨3点左右,时间可在/etc/crontab中修改
增加59 23 * * * root run-parts /etc/cron.daily即可
测试命令:/usr/sbin/logrotate -d /etc/logrotate.d/nginx
查看分割记录cat /var/lib/logrotate.status