CentOS下nginx日志切割 防止单日志文件太大打不开 logrotate+crontab

1,673 阅读2分钟

前言

Logrotate程序是CentOS内置的一个日志文件管理工具。用来把旧的日志文件更名或删除,并创建新的日志文件,我们把它叫做“转储”。是个使日志轮替的程序,有了它就不用看着自己的日志体积一天天的变大,而可以根据你自己的需求来设定日志转储。

logrotate 的主要配置文件是:/etc/logrotate.conf ,以及 /etc/logrotate.d/ 目录下面放置自定义的一些配置文件。比如我们可以将nginx 的相关轮转日志放到 /etc/logrotate.d/ 目录下。logrotate 在运行的时候会执行 者两个目录下的配置。下面我们以nginx 的日志轮转日志为例进行配置。

步骤一 、编写配置文件

/usr/local/nginx/logs/*.log{
        #每天进行轮转
        daily
        #保留20个日志文件
        rotate 20
        #当日志文件大于100k后进行日志轮转 
        size 100k
        #指定新建的日志文件权限以及所属用户和组
        create 644 root root
        #日志文件名中增加时间
        dateext
        # 结合dateext 实现文件的命名
        dateformat -%Y%m%d%H-%s
        #忽略错误
        missingok
        #copytruncate
        #分享脚本,如果没有配置这个,日志目录下有多个日志时,下面的脚本会执行多次
        sharedscripts
        postrotate
                 if [ -f /usr/local/nginx/logs/nginx.pid ]; then
                         kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
                 fi
        endscript
}

步骤二、 关闭 SElinux 否者会导致日志无法正常的切割

临时关闭:

setenforce 0
或
setenforce Permissive

永久关闭

vi /etc/selinux/config
 将配置文件中
SELINUX=enforcing 改为:SELINUX=disabled 
保存配置文件
reboot #重启系统
 

步骤三、自定义日志滚动执行时间

由于 系统默认的logrotate 是每天的 3-22点 随机选择一个时间, 在这里插入图片描述

可能不太符合我们的要求,这个时候就可以自定义一个任务,在每天的23:59分执行日志滚动:

#每天23点59分执行一次 切割nginx 日志 并将运行日志放到 logrotate.splitlog 文件中
59 23 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx  >>/usr/local/nginx/logs/logrotate.splitlog 2>&1

第二天看到运行结果如下图:

在这里插入图片描述

常用命令

查看logrotate的运行状态:cat /var/lib/logrotate/logrotate.status

查看crontab 的运行日志: cat /var/log/cron

参考链接

  1. logrotate滚动日志失败

  2. 你真的搞懂logrotate了吗?

  3. Linux crontab 命令

  4. Linux logrotate命令

  5. logrotate 的使用简介

  6. 日志切割小结

  7. Linux自带神器logrotate详解

  8. logrotate切割日志后,新的日志还是写入到老的日志文件中