Nginx日志切割(Logrotate程序设置)

使用系统自带的Logrotate程序进行日志分割

1、修改logrotate 日志切割轮询

mv /etc/anacrontab /etc/anacrontab.bak          // 取消日志自动轮转的设置

使用 crontab 来作为日志轮转的触发容器来修改 logrotate 默认执行时间

crontab -e -u root
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts

59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx

FAQ:具体为什么需要原来的日志自动轮询看这:https://wsgzao.github.io/post/logrotate/

2、需要确定三个地方

1、nginx的PID进程文件位置,通过查看nginx.conf文件配置

假设示例中,配置文件定义位置为:/var/run/nginx.pid

2、nginx日志文件存放位置假设示例中,配置文件定义log位置为:

/var/log/nginx/access.log
/var/log/nginx/errors.log

3、nginx日志文件所属用户名和用户组: nginx adm

3、创建并编辑文件

Nginx编译安装的情况vim /etc/logrotate.d/nginx

/var/log/nginx/*.log {
        daily
        missingok
        rotate 180
        dateext
        compress
        delaycompress
        notifempty
        create 644 nobody root        
        sharedscripts
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

使用docker Nginx的话需要将postrotate和endscript之间的的Nginx重新加载的语句更换下


使用docker版本启用Nginx的情况

/data/nginx/logs/*.log {
        daily
        missingok
        rotate 180
        dateext
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
            docker exec nginx nginx -s reload        
        endscript
}
docker exec nginx nginx -s reload  #表示进入name为nginx的docker实例重启nginx程序

配置详细说明在文末

4、测试命令:

logrotate -dv /etc/logrotate.d/nginx   #预演,不实际轮循不分割日志,只是看执行情况是否成功

配置详细说明如下:

/var/log/nginx/*.log {    #指定日志文件位置,这里使用正则匹配所有.log结尾的日志文件
        daily     #这里使用按天分割日志调用频率,有:daily(按天分割日志),weekly(按周分割日志),monthly(按月分割日志) 可选
        minsize 1M    #(可选,一般与按时间划分二选一即可)#当日志大于1M时自动划分日志。与按时间划分不同,这个是按照日志大小划分
        missingok     #在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
        rotate 180    #日志切分后历史文件最多保存 180 份,不含当前使用的日志
        dateext    #使用日期为后缀的回滚文件,简单来说就是日志文件末尾跟日期,例如:error.log-20211101   这种
        compress    #在轮循任务完成后,已轮循的归档将使用 gzip 进行压缩
        delaycompress     # 总是与 compress 选项一起用,delaycompress 选项指示 logrotate 不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
        notifempty      # 如果日志文件为空,轮循不会进行。
        create 640 nginx adm    #设置 nginx 这个日志文件的权限,属主,属组
        sharedscripts    #所有的日志文件都轮转完毕后统一执行一次脚本
        postrotate         #执行命令的开始标志
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`   #平滑重启,不影响业务,另外一种重新加载配置文件写法:/usr/sbin/nginx -s reload  (需要nginx程序位置)
                fi
        endscript    #执行命令的结束标志
}

注释:日子轮循:指的是一个目录下有多个日志文件时,将逐个对日志文件进行切割。

5、添加任务计划

crontab -e -u root
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx

设置每天23:59进行nginx日志分割

版权声明:
作者:WaterBear
链接:https://l-t.top/2277.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录