使用logrotate定期切割nginx日志
前言
默认情况下,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规则可能会随机,所以直接删了默认规则,自行定义。
rm -rf /etc/cron.daily/logrotate- 使用
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日志的更多相关文章
- Linux环境下使用logrotate工具实现nginx日志切割
一. 前提背景及需求 nginx运行日志默认保存在nginx安装目录下的 /usr/local/nginx/logs 文件夹, 包含access.log和error.log两个文件. (1) acce ...
- 烂泥:切割nginx日志
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 这几天自己看了下博客的nginx日志,发现日志文件发现越来越大. 因为nginx自己不会 ...
- Python切割nginx日志_小组_ThinkSAAS
Python切割nginx日志_小组_ThinkSAAS Python切割nginx日志
- 编写每天定时切割Nginx日志的脚本
自动每天定时切割Nginx日志的脚本,很方便很好用,推荐给大家使用.本脚本也是参考了张宴老师的文章,再次感谢张宴老师.1.创建脚本/usr/local/nginx/sbin/cut_nginx_log ...
- 按小时或天切割Nginx日志
#按小时或天切割Nginx日志到备份文件夹 LOGS_PATH=/home/www/logs/thc SAVE_PATH=/home/www/logs/thc YESTERDAY=$(date -d ...
- shell按日期自动切割nginx日志脚本
shell按日期自动切割nginx日志脚本 参考:自学it网 http://www.zixue.it/. #nginx日志切割脚本 #author:ce #!/bin/bash #设置日志文件存放目录 ...
- shell切割nginx日志
用linux自带的计划任务切割nginx日志,每天0点执行 #!/bin/bash #GuoYabin nginxpid=`/bin/ps aux|grep nginx |awk /master/'{ ...
- logrotate切割nginx日志
1 配置 使用系统自带的logrorate来切个nginx日志,位于/usr/sbin/logrotate 假设服务器上有两个网站的nginx配置分别如下: 去除其它配置信息,只保留了日志相关 A网站 ...
- 028_切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)
mkdir /data/scriptsvim /data/scripts/nginx_log.sh #!/bin/bashlogs_path="/usr/local/nginx/logs/& ...
- Linux系统上面使用python切割nginx日志
#!/usr/bin/python import time import os import commands path = ['/var/log/nginx/', 'access.log'] (nu ...
随机推荐
- vue中点击其他任意位置关闭弹框
mounted() { //点击任意位置关闭区域弹窗 document.addEventListener('click', (e) => { //获取弹窗对象 const userCon = d ...
- 2022-08-15:k8s安装pgadmin,yaml如何写?
2022-08-15:k8s安装pgadmin,yaml如何写? 答案2022-08-15: yaml如下: # 依赖postgres.yaml apiVersion: apps/v1 kind: D ...
- 2022-08-04:输入:去重数组arr,里面的数只包含0~9。limit,一个数字。 返回:要求比limit小的情况下,能够用arr拼出来的最大数字。 来自字节。
2022-08-04:输入:去重数组arr,里面的数只包含0~9.limit,一个数字. 返回:要求比limit小的情况下,能够用arr拼出来的最大数字. 来自字节. 答案2022-08-04: 从左 ...
- 2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号。 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi,
2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号. 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi, ...
- 《数据结构(C语言版)》严蔚敏代码实现———链表
一.前言 哈喽,大家好~我是熊子q,我又来了! 他来了他来了,他带着代码过来了! 今天要分享的代码是链表!快快搬着小板凳! 二.代码 严奶奶的书中预定义了一些预定义常量和类型,大家可以 新建一个y.h ...
- L2-035 完全二叉树的层序遍历
题目描述: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就 ...
- windows下搭建docker容器环境
下载Docker Desktop https://www.docker.com/ 安装Docker Desktop(软件默认安装c盘,若要安装到其他盘,在安装之前创建软连接再进行安装) 在自定义磁盘中 ...
- odoo开发教程十:Actions
actions定义了系统对于用户的操作的响应:登录.按钮.选择项目等. 一:窗口action(ir.actions.act_window ) 最常用的action类型,用于将model的数据展示出来. ...
- Flutter三棵树系列之BuildOwner
引言 Flutter开发中三棵树的重要性不言而喻,了解其原理有助于我们开发出性能更优的App,此文主要从源码角度介绍Element树的管理类BuildOwner. 是什么? BuildOwner是el ...
- 基于AIGC的京东购物助手的技术方案设想
灵感来源 随着AIGC的爆火,ChatGPT,GPT-4的发布,我作为一个算法工作者,深感AI发展的迅猛.最近,OpenAI的插件和联网功能陆续向用户公开,我也在第一时间试用了这些最新的功能.在Ope ...