使用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 ...
随机推荐
- 2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和。请用go语言改写。
2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和.请用go语言改写. 答案2023-04-15: 代码见gi ...
- 2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点。
福哥答案2020-10-22: 简单回答:相同点:都是多个单元操作.不同点:LongAdder相加,LongAccumulator自定义计算规则. 中级回答:相同点: LongAddr与LongAcc ...
- 2021-08-01:如果只给定一个二叉树前序遍历数组pre和中序遍历数组in,能否不重建树,而直接生成这个二叉树的后序数组并返回。已知二叉树中没有重复值。
2021-08-01:如果只给定一个二叉树前序遍历数组pre和中序遍历数组in,能否不重建树,而直接生成这个二叉树的后序数组并返回.已知二叉树中没有重复值. 福大大 答案2021-08-01: 先序遍 ...
- Jupyter Notebook (Anaconda3)更改保存文件的默认路径
打开jupyter 查找路径 1 import os 2 a=os.path.abspath('.') 3 print(a) 创建个人文件夹 E:\pyAPP\JupyterWork 查找修改配置文件 ...
- Mybatis查询
查询 查询的数据为单条实体类 使用实体类进行接受即可,或者使用list,map接口均可.后面两者比较浪费 使用实体类接受 mapper接口: User selectUserById(int useri ...
- Node.js出现‘Cannot find module init’ 解决方法
1. 首先查看当前根目录是否有node_module文件夹,如果有,请删除 2. 输入 npm clean cache 3. 再次输入 node init -y 大功告成
- web自动化04-css定位
css元素定位 1. 是什么? 用来描述html元素的显示样式 选择器是一种模式,用于选择需要添加样式的元素 selenium中推荐使用css定位,比XPath定位要快 2.如何定位? ...
- 代码随想录算法训练营Day36 贪心算法
代码随想录算法训练营 代码随想录算法训练营Day36 贪心算法| 435. 无重叠区间 763.划分字母区间 56. 合并区间 435. 无重叠区间 题目链接:435. 无重叠区间 给定一个区间的集合 ...
- ODOO升级可能遇到问题
a,找不到模块或视图不存在. 解决方案:查看是否将相应py文件加入到__init__文件中,或xml文件加入到manifest->data文件中. b, 找不到关联模块. 解决方案:这种一般要么 ...
- 文心一言 VS 讯飞星火 VS chatgpt (28)-- 算法导论5.1 3题
三.假设你希望以1/2的概率输出0与 1.你可以自由使用一个输出0或1的过程 BIASED-RANDOM.它以某概率 p 输出1,概率 1-p 输出0,其中 0<p<1 ,但是 p 的值未 ...