前言

默认情况下,nginx的日志都会写到access.log文件中,访问流量大的话,日志文件很快就会膨胀到几十G,不方便分析处理,也占用硬盘空间。借助linux自带的logrotate工具可以很方便地实现日志自动分割。

  • nginx日志目录:/usr/local/nginx/logs/

按天切割nginx日志的配置

vim /etc/logrotate.d/nginx

/usr/local/nginx/logs/*.log {
daily
size 10M
minsize 10M
rotate 30
missingok
notifempty
compress
nodelaycompress
copytruncate
dateext
dateformat -%Y-%m-%d
dateyesterday
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ];then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}

配置说明:

  • 按天切割
  • 文件大小为10M的时候才切割
  • 保留最近30天的日志文件
  • 切割中遇到日志错误忽略
  • 日志如果为空将不进行切割和压缩
  • 以gzip压缩
  • 不要将刚切割后的日志文件放到下个循环中进行压缩
  • 切割后的日志文件添加扩展名
  • 扩展名为年月日
  • 扩展名的年月日为昨天的日期
  • 在切割后执行 postrotate/endscript之间的命令,此处为热重启nginx

logrotate常用配置指令

指令 说明
daily 日志归档周期为1天。默认周期
hourly 日志归档周期为1小时
weekly 日志归档周期为1周
monthly 日志归档周期为1月,通常为每月的第一天
size 日志文件可被归档的最小值
minsize 日志文件可被归档的最小值,没到归档周期执行时间,不会执行归档操作
maxsize 日志文件大小超过设定值时,即使没到归档周期执行时间,也会执行归档操作
rotate 保留归档文件数,默认为0
missingok 如果日志文件不存在,则不显示错误信息
nomissingok 如果日志文件不存在,则显示错误信息。默认配置
notifempty 如果日志文件为空,则不进行归档操作。默认配置
ifempty 即使日志文件为空,也执行归档操作
compress 对归档文件启用压缩,默认为gzip压缩
nocompress 不压缩归档文件。默认配置
compresscmd 指定压缩归档文件的命令,默认为gzip压缩
delaycompress 在下一个归档周期再对当前归档文件进行压缩
nodelaycompress 不延迟压缩。默认配置

使用crontab定时执行logrotate

因为系统默认的logrotate规则可能会随机,所以直接删了默认规则,自行定义。

  1. rm -rf /etc/cron.daily/logrotate
  2. 使用crontab -e新建crontab规则:00 00 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx,这样每天凌晨0点0分就会执行nginx日志切割。注意确认logrotate命令的位置。

脚本方式

有的环境也用shell脚本+crontab的方式实现了nginx日志切割

#!/bin/bash
# description: nginx日志切割脚本 set -u
LogDir="/home/admin/apps/openresty/nginx/logs" # nginx日志路径
Expires=15 # 日志保留时长, 15天 function init() {
if [[ ! -d ${LogDir} ]]; then
echo "${LogDir} not found"
exit 1
fi
} function main() {
cd ${LogDir}
for logfile in $(ls *.log);do
local logDate=$(date "+%F")
local gzipfile="${logfile}-${logDate}.gz"
gzip -c ${logfile} > ${gzipfile}
cat /dev/null > ${logfile}
done find ./* -type f -mtime +${Expires} -iname "*.gz" | xargs rm -f
} init
main

使用logrotate定期切割nginx日志的更多相关文章

  1. Linux环境下使用logrotate工具实现nginx日志切割

    一. 前提背景及需求 nginx运行日志默认保存在nginx安装目录下的 /usr/local/nginx/logs 文件夹, 包含access.log和error.log两个文件. (1) acce ...

  2. 烂泥:切割nginx日志

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 这几天自己看了下博客的nginx日志,发现日志文件发现越来越大. 因为nginx自己不会 ...

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

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

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

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

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

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

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

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

  7. shell切割nginx日志

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

  8. logrotate切割nginx日志

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

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

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

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

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

随机推荐

  1. 【Python基础】推导式(列表、字典、集合)

    推导式是一种简洁.高效的语法,用于从一个可迭代对象中生成新的可迭代(iterable)对象. 通常情况下,在以下情况可以考虑使用推导式: 只需要简单的表达式来计算新的可迭代对象的元素. 可迭代对象不是 ...

  2. SQLlabs less1-10通关笔记

    SQLlabs 通关笔记 mysql数据结构 在练习靶场前我们需要了解以下mysql数据库结构,mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有 ...

  3. MAUI开发Android程序使PDA扫码广播消息转发至Web页面

    前言 公司系统的手持终端(PDA)是用的Vue写的前端代码 在PDA上用浏览器直接打开Web页面 PDA扫码的时候,输出模式直接用模拟键盘按键的方式输出 这样在Web页面上,如果一个输入框在当前有焦点 ...

  4. 2022-01-25:序列化和反序列化 N 叉树。 序列化是指将一个数据结构转化为位序列的过程,因此可以将其存储在文件中或内存缓冲区中,以便稍后在相同或不同的计算机环境中恢复结构。 设计一个序列化和反

    2022-01-25:序列化和反序列化 N 叉树. 序列化是指将一个数据结构转化为位序列的过程,因此可以将其存储在文件中或内存缓冲区中,以便稍后在相同或不同的计算机环境中恢复结构. 设计一个序列化和反 ...

  5. 【深入浅出 Yarn 架构与实现】6-4 Container 生命周期源码分析

    本文将深入探讨 AM 向 RM 申请并获得 Container 资源后,在 NM 节点上如何启动和清理 Container.将详细分析整个过程的源码实现. 一.Container 生命周期介绍 Con ...

  6. CPU后面的字母含义

    M(Mobile):移动笔记本电脑标准电压,功耗小,适合笔记本,i5-4310M. U(Ultra Low Voltage):移动笔记本电脑超低电压,更小的功耗.如i5-8250U. H(Height ...

  7. RESTful API 简介

    RESTful API 简介 想必使用过 PHP.JSP 这一类服务器动态页面技术的程序员应该都还记得,在使用这种传统的动态页面架构构建应用程序的时候,用于描述用户界面的 HTML 页面通常都是在服务 ...

  8. WPF入门教程系列二十七 ——DataGrid使用示例MVVM模式(4)

    WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...

  9. ChatGLM 拉取清华git项目

    windows使用nvdia显卡运行ChatGLM 1. 安装nvidia显卡驱动 https://developer.nvidia.com/cuda-11-8-0-download-archive? ...

  10. jenkins中的坑_CreateProcess error=1392

    环境:windows11,jdk1.8,jenkins_2.346.war 起因 最近在使用jenkins部署项目的时候,填写仓库的url地址时,发现填完后报500这个错误,于是我打开jenkins的 ...