前言

默认情况下,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. Django笔记三十八之发送邮件

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十八之发送邮件 这一篇笔记介绍如何在 Django 中发送邮件. 在 Python 中,提供了 smtplib 的邮件模块,而 Djan ...

  2. 2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个。 返回有没有

    2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个. 返回 ...

  3. 2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母

    2021-10-02:单词搜索.给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false .单词必须按照字母 ...

  4. Golang接收者方法语法糖

    1.概述 在<Golang常用语法糖>这篇博文中我们讲解Golang中常用的12种语法糖,在本文我们主要讲解下接收者方法语法糖. 在介绍Golang接收者方法语法糖前,先简单说下Go 语言 ...

  5. 【GiraKoo】C++中static关键字的作用

    C++中static关键字的作用 在程序中良好的使用static,const,private等关键字,对于代码的健壮性有很大的帮助. 本文介绍的就是C++中static关键字的一些常见用法与区别.适合 ...

  6. 在Centos7上安装PXE装机环境来批量安装操作系统

    步骤 1:安装必要的软件包 首先,需要确保系统已安装 dhcp.tftp-server 和 httpd 等软件包.可以使用以下命令进行安装: yum install -y dhcp tftp-serv ...

  7. HTML5网页游戏开发

    HTML概述 互联网上的应用程序被称为Web应用程序,web应用程序使用Web文档(网页)来表示用户界面,Web文档都遵循html格式,html5是最新的html标准 HTML基础 HTML是Hype ...

  8. drf——反序列化校验源码(了解)、断言、drf之请求和响应、视图之两个视图基类

    1.模块与包 # 模块与包 模块:一个py文件 被别的py文件导入使用,这个py文件称之为模块,运行的这个py文件称之为脚本文件 包:一个文件夹下有__init__.py # 模块与包的导入问题 '' ...

  9. 基于 Web 的 Linux 终端 WebTerminal

    有时候用公共电脑,或者在没有安装 putty.xshell 之类的终端的电脑上访问或展示服务器上的一些资料数据,甚至是在运维平台开发中想要嵌入 WebTerminal 功能,于是找到了这个项目--基于 ...

  10. 在R中子集化数据框的5种方法

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 通常,我们在使用大型数据集时,只会对其中的一小部分感兴趣,用以进行特定分析. 那么,我们应该如 ...