码迷,mamicode.com
首页 > 其他好文 > 详细

nginx 日志切割

时间:2020-06-25 19:27:00      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:通过   切割   用户   日志切割   路径   yesterday   分割   使用   文件中   

概述

nginx  日志一般都是两种access.log   error.log ,可以每个location 区域配置一份,也就是每个请求服务一个日志。它的日志不会自动切割,需要人为根据时间或者日志量切割。

脚本完成nginx日志切割

vi /opt/nginx/cut_nginx_log.sh
  #!/bin/bash
  #此脚本用于自动分割Nginx的日志,包括access.log和error.log
  #每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx-xx.log格式,并重新打开日志文件
  LOG_PATH
=/opt/nginx/logs                        #Nginx日志文件所在目录   YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)             #获取昨天的日期   PID=/var/run/nginx/nginx.pid                      #获取pid文件路径   mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log #分割日志   mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log   kill -USR1 `cat ${PID}`                        #向Nginx主进程发送USR1信号,重新打开日志文件

制作计划任务

crontab -e
# 输入以下内容并保存
00 00 * * * /bin/bash /opt/nginx/sbin/cut_nginx_log.sh

关于kill -USR1

nginx 的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项设置的值,如果文件不存在,会自动创建一个新的文件xx.log)。 然后把日志文件的拥有者改为“工作进程(worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行,所以需要改变拥有者)

nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成xxx.log-$date.log的文件),并通知工作进程使用新打开的日志文件(刚才主进程打开的文件xxx.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开日志文件(也就是配置文件中约定的xxx.log)

如果不运行此命令,即使access.log 已经改名为access-xxxxx.log 了但是nginx 还是会把日志写入access-xxxx.log 因为日志文件名字变了但是inode 等信息不变,所以不会自动把新日志写入access.log

拓展

日志切割有一个工具 logrotate,可以通过安装此工具来切割日志

nginx 日志切割

标签:通过   切割   用户   日志切割   路径   yesterday   分割   使用   文件中   

原文地址:https://www.cnblogs.com/fanggege/p/13192586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!