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日志分割
文章目录
关闭