本文由ilanniweb提供友情赞助,首发于烂泥行天下

想要获得更多的文章,可以关注我的微信ilanniweb

这几天自己看了下博客的nginx日志,发现日志文件发现越来越大。

因为nginx自己不会对日志文件进行切割,所以打算通过其他方式进行切割,而且为了后续能对nginx日志文件里面记录的数据进行分析,所以打算按照天对其进行切割。

PS:本篇文章所以的操作是在centos6.5 OS 64bit上进行。

切割nginx日志,我们可以通过两种不同的方式进行,分别是:通过logrotate和通过shell脚本。

如果是yum方式安装的nginx,系统默认会自动通过logrotate这个日志管理软件,按天进行分割。但是经过多次测试发现logrotate切割日志不会按照自己设置的时间点进行分割,这点有点失望。

所以无论是yum方式安装,还是源码方式安装,都建议使用shell脚本方式进行切割日志。

为了更深入的学习linux系统,在此也会介绍下logrotate相关的知识点。

下面分别对这两种方法进行介绍下:

一、使用logrotate切割

前面说了yum或者apt-get方式安装的nginx会自动使用logrotate这个日志管理软件进行切割,所以本章节我们主要介绍有关logrotate相关的知识点。

1.1 logrotate介绍

logrotate是什么呢?它是一个linux系统日志的管理工具。它可以切割、压缩等其他软件的日志文件软件。

logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,具体可以查询crontab的配置文件/etc/anacrontab。

我们可以通过如下命令安装logrotate,如下:

yum -y install logrotate

如果是ubuntu系统,可以使用如下命令进行安装:

apt-get -y install logrotate

查看logrotate的配置文件,使用如下命令:

rpm -ql logrotate

通过上图,我们可以很明显的看到logrotate的配置文件是/etc/logrotate.conf,而/etc/logrotate.d/是用于存储其他配置文件的目录。该目录里的所有文件都会被主动的读入 /etc/logrotate.conf中执行。

1.2 logrotate配置文件详解

logrotate配置选项相对来说比较少,为了切合本篇文章,在此我们以切割nginx的配置文件为例,如下:

cat /etc/logrotate.d/nginx

/var/log/nginx/*.log {

daily

missingok

rotate 7

dateext

# compress

delaycompress

notifempty

create 640 nginx adm

sharedscripts

postrotate

[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

endscript

}

在该配置文件中,每个参数作用如下:

/var/log/nginx/为nginx日志的存储目录,可以根据实际情况进行修改。

daily:日志文件将按天轮循。

weekly:日志文件将按周轮循。

monthly:日志文件将按月轮循。

missingok:在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

rotate 7:一次存储7个日志文件。对于第8个日志文件,时间最久的那个日志文件将被删除。

dateext:定义日志文件后缀是日期格式,也就是切割后文件是:xxx.log-20160402.gz这样的格式。如果该参数被注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式。

compress:在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

delaycompress:总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。

notifempty:如果是空文件的话,不进行转储。

create 640 nginx adm:以指定的权限和用书属性,创建全新的日志文件,同时logrotate也会重命名原始日志文件。

postrotate/endscript:在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd进程将立即再次读取其配置并继续运行。注意:这两个关键字必须单独成行。

1.3 查看logrotate默认执行时间

logrotate切割时间默认是在每天的3:22。这个时间点可以通过crontab配置文件查看到。如下:

cat /etc/anacrontab

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

# the jobs will be started during the following hours only

START_HOURS_RANGE=3-22

1 5 cron.daily nice run-parts /etc/cron.daily

7 25 cron.weekly nice run-parts /etc/cron.weekly

@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

其中START_HOURS_RANGE参数就是配置logrotate切割的时间点。

如果你想在指定时间点,让logrotate切割日志的话,可以修改此配置文件的START_HOURS_RANGE参数。

但是经过多次实验,我发现logrotate没有按照我指定的时间进行切割日志。

所以最后我还是选择了使用shell脚本来切割nginx日志。

二、使用shell脚本切割

使用shell脚本切割nginx日志很简单,shell脚本内容如下:

vim /usr/local/cut_del_logs.sh

#!/bin/bash

#初始化

LOGS_PATH=/var/log/nginx

YESTERDAY=$(date -d "yesterday" +%Y%m%d)

#按天切割日志

mv ${LOGS_PATH}/ilanni.com.log ${LOGS_PATH}/ilanni.com_${YESTERDAY}.log

#向nginx主进程发送USR1信号,重新打开日志文件,否则会继续往mv后的文件写数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。如果不这样操作导致日志切割失败。

kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`

#删除7天前的日志

cd ${LOGS_PATH}

find . -mtime +7 -name "*20[1-9][3-9]*" | xargs rm -f

#或者

#find . -mtime +7 -name "ilanni.com_*" | xargs rm -f

exit 0

该shell脚本有两个功能,第一个是切割nginx日志,第二个是删除7天之前的nginx日志。

在切割nginx日志的功能中,我们要注意该shell脚本命名切割的日志是以切割时,是以前一天的时间就行命名该日志文件的。

所以我们在把该shell脚本放在crontab中执行时,建议在每天的0点0分执行。如下:

vim /etc/crontab

0 0 * * * root /bin/sh /usr/local/cut_del_logs.sh

查看nginx切割的日志文件,如下:

ll --full-time /var/log/nginx/

通过上图,我们可以很明显的看到,切割shell脚本确实按照我们设想的进行切割和命名切割日志文件的。

烂泥:切割nginx日志的更多相关文章

  1. Python切割nginx日志_小组_ThinkSAAS

    Python切割nginx日志_小组_ThinkSAAS Python切割nginx日志

  2. 编写每天定时切割Nginx日志的脚本

    自动每天定时切割Nginx日志的脚本,很方便很好用,推荐给大家使用.本脚本也是参考了张宴老师的文章,再次感谢张宴老师.1.创建脚本/usr/local/nginx/sbin/cut_nginx_log ...

  3. 按小时或天切割Nginx日志

    #按小时或天切割Nginx日志到备份文件夹 LOGS_PATH=/home/www/logs/thc SAVE_PATH=/home/www/logs/thc YESTERDAY=$(date -d ...

  4. shell按日期自动切割nginx日志脚本

    shell按日期自动切割nginx日志脚本 参考:自学it网 http://www.zixue.it/. #nginx日志切割脚本 #author:ce #!/bin/bash #设置日志文件存放目录 ...

  5. shell切割nginx日志

    用linux自带的计划任务切割nginx日志,每天0点执行 #!/bin/bash #GuoYabin nginxpid=`/bin/ps aux|grep nginx |awk /master/'{ ...

  6. logrotate切割nginx日志

    1 配置 使用系统自带的logrorate来切个nginx日志,位于/usr/sbin/logrotate 假设服务器上有两个网站的nginx配置分别如下: 去除其它配置信息,只保留了日志相关 A网站 ...

  7. 028_切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)

    mkdir /data/scriptsvim /data/scripts/nginx_log.sh #!/bin/bashlogs_path="/usr/local/nginx/logs/& ...

  8. Linux系统上面使用python切割nginx日志

    #!/usr/bin/python import time import os import commands path = ['/var/log/nginx/', 'access.log'] (nu ...

  9. 烂泥:利用awstats分析nginx日志

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割 ...

随机推荐

  1. Objective-C中NSInvocation的使用

    OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation. 第一个PerformaceSelector比较常 ...

  2. 5.如何使主机和虚拟机IP处于同一网段(内网渗透专用)

    先说一下正常流程: 1.打开虚拟机网络设置选项,选择桥接模式(Bridged)[如果是Kali 2.0的话,执行第一步后就OK了(90%)] 2.打开Kali里面的网络设置 3.设置一个ip4或者ip ...

  3. 总结一下CSS中的定位 Position 属性

    在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...

  4. 【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)

    RAC在LINUX上使用NFS安装前准备(六) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇 ...

  5. 多项目并行开发如何做到快速切换——sublime Text3

    sublime text有一个很人性化的功能,就是打开窗口的时候,它会把上一次关闭时的编辑器工作区状态完全复原(不论文件是否已经保存). 只有一个项目的时候,这个功能非常方便,可以保证重启电脑后cod ...

  6. 【分布式】Zookeeper数据与存储

    一.前言 前面分析了Zookeeper对请求的处理,本篇博文接着分析Zookeeper中如何对底层数据进行存储,数据存储被分为内存数据存储于磁盘数据存储. 二.数据与存储 2.1 内存数据 Zooke ...

  7. angularjs之filter过滤器

    现在公司用ionic,就是基于angularjs封装了一些api用于webapp,最近用的angularjs的filter确实省了很多代码,现在总结一下! ng比较鸡肋的过滤器,这里就一笔带过吧!鸡汤 ...

  8. SQL Server索引视图以(物化视图)及索引视图与查询重写

    本位出处:http://www.cnblogs.com/wy123/p/6041122.html 经常听Oracle的同学说起来物化视图,物化视图的作用之一就是可以实现查询重写,听起来有一种高大上的感 ...

  9. 3.JAVA之GUI编程Frame窗口

    创建图形化界面思路: 1.创建frame窗体: 2.对窗体进行基本设置: 比如大小.位置.布局 3.定义组件: 4.将组件通过add方法添加到窗体中: 5.让窗体显示,通过setVisible(tur ...

  10. ASP.NET Core 中文文档 第二章 指南(4.8)添加新的字段

    原文 Adding a New Field 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).高嵩(Jack) 在这个章节你将使用 Entity Framework ...