Nginx日志切割

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表示结束

你可能感兴趣的:(nginx,日志切割)