Nginx日志切割
Nginx没有apache自动日志切割工具,但是我们可以自己写脚本,也可以借助Centos自带的日志归档工具logrotate
一、写一个nginx的日志切割脚本
[root@daixuan nginx_log]# vim /usr/local/sbin/nginx_logrotate.sh
#!/bin/bash
d=`date -d "-1 day" +%F`
[ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log
mv /tmp/access.log /tmp/nginx_log/$d.log
/etc/init.d/nginx reload > /dev/null
cd /tmp/nginx_log/
gzip -f $d.log
执行:
[root@daixuan nginx_log]# sh -x /usr/local/sbin/nginx_logrotate.sh
++ date -d '-1 day' +%F
+ d=2016-01-11
+ '[' -d /tmp/nginx_log ']'
+ mv /tmp/access.log /tmp/nginx_log/2016-01-11.log
+ /etc/init.d/nginx reload
+ cd /tmp/nginx_log/
+ gzip -f 2016-01-11.log
查看
[root@daixuan nginx_log]# ls /tmp/nginx_log
2016-01-11.log.gz
此外,可以把日志切割脚本添加到cron任务计划中,每天0点0分去执行日志切割
二、借助系统的logrotate工具实现
[root@daixuan vhosts]# vim /etc/logrotate.d/nginx
/home/logs/*.log{
Daily
Missingok
rotate 52
compress
delaycompress
notifempty
create 644 nobody nobody
sharedscripts
postrotate
[ -f /usr/local/nginx/var/nginx.pid] && kill -USR1 'cat /usr/local/nginx/var/nginx.pid'
Endscript
}
说明:
第一行就是定义日志的路径,可以是多个日志
Daily 表示日志按天归档
missingok 表示忽略所有错误,比如日志文件不存在的情况下
rotate 52表示存放日志的个数,最多是52个,最老的会被删除
compress 表示日志要压缩
delaycompress 表示压缩了除了当前和最近之外的所有其他版本
notifempty表示如果日志为空,则不归档
create 644 nobody nobody定义归档日志的权限以及属主和属组
sharedscripts表示所有的日志共享该脚本,因为我们再这里指定的日志文件为多个,用来*.log
postrotate后面跟轮换过日志之后要运行的命令
Endscript表示结束