当前位置: 首页 > news >正文

Nginx--手写脚本压缩和切分日志(也适用于docker)

原文网址:Nginx--手写脚本压缩和切分日志(也适用于docker)_IT利刃出鞘的博客-CSDN博客

简介

本文介绍nginx如何手写脚本压缩和切分日志。

1.创建切分日志的脚本

创建脚本文件:/work/tmp/nginx-log_sh(后边要用run-parts去运行,脚本名中不能带.)

内容如下:

法1:每小时执行

#!/bin/bash# 轮转的时间单位
rotateUnit="1 hour"
# 日志位置
logPath=/work/middle/nginx/logs/
# 文件存活天数(这些天之前的文件会被删掉)
oldFileTtl=20# 当前时间
nowTime=$(date +"%Y%m%d %H")
# 上一段时间
preTime=$(date -d "$nowTime -$rotateUnit" +"%Y%m%d %H")
# 上一段时间对应的文件名后缀
preTimeFileSuffix=$(date -d "$nowTime -$rotateUnit" +"%Y%m%d_%H")
# 上一段日期对应的目录
preDatePath=$(date -d "$preTime" +"%F")if [ ! -d "$logPath" ];
thenexit 1
ficd $logPathif [ ! -d "$preDatePath" ];
thenmkdir -p "$preDatePath"
fi# 将access.log和error.log移到日期文件夹内
mv *.log $preDatePath# 通知Nginx,让它重新生成一份access.log和error.log
docker exec nginx1.23.3 /bin/bash -c \"if [ -f /run/nginx.pid ]; then kill -USR1 `docker exec nginx1.23.3 cat /run/nginx.pid`; echo 日志打包完毕; fi"# 如果是非docker方式启动nginx,则这样写# [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`# 压缩文件
pushd $preDatePath
tar czf $preTimeFileSuffix.tar.gz *.log
rm *.log -f
popd# 删除指定时间之前的日志
find ./ -type d -mtime +$oldFileTtl | xargs rm -rf
find ./ -type d -mtime +2 -empty -delete 

备注

 如果需要指定时区,可以这么写:

#!/bin/bashgetNowTime()
{TZ='Asia/Shanghai' date "+%Y%m%d_%H%M"
}
nowTime=$(getNowTime)

法2:每天执行

#!/bin/bash# 轮转的时间单位
rotateUnit="1 day"
# 日志位置
logPath=/work/middle/nginx/logs/
# 文件存活天数(这些天之前的文件会被删掉)
oldFileTtl=20# 当前时间
nowTime=$(date +"%Y%m%d")
# 上一段时间
preTime=$(date -d "$nowTime -$rotateUnit" +"%Y%m%d")
# 上一段时间对应的文件名后缀
preTimeFileSuffix=$(date -d "$nowTime -$rotateUnit" +"%Y%m%d")
# 上一段日期对应的目录
preDatePath=$(date -d "$preTime" +"%F")if [ ! -d "$logPath" ];
thenexit 1
ficd $logPathif [ ! -d "$preDatePath" ];
thenmkdir "$preDatePath"
fi# 将access.log和error.log移到日期文件夹内
mv *.log $preDatePath# 通知Nginx,让它重新生成一份access.log和error.log
docker exec nginx1.23.3 /bin/bash -c \"if [ -f /run/nginx.pid ]; then kill -USR1 `docker exec nginx1.23.3 cat /run/nginx.pid`; echo 日志打包完毕; fi"# 如果是非docker方式启动nginx,则这样写# [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`# 压缩文件
pushd $preDatePath
tar czf $preTimeFileSuffix.tar.gz *.log
rm *.log -f
popd# 删除指定时间之前的日志
find ./ -type d -mtime +$oldFileTtl | xargs rm -rf
find ./ -type d -mtime +2 -empty -delete 

2.创建定时任务

命令

sudo crontab -e

添加如下内容(本处我用两分钟执行一次来测试)

*/2 * * * * run-parts /work/tmp &>>/work/tmp/log.txt

实际应该这样写每小时执行一次:

​1 * * * * run-parts /work/tmp &>>/work/tmp/log.txt

编辑完保存后,会自动生效。如下图所示:

3.查看任务是否执行

如图所示,已经执行

4.查看结果

可以发现,已经执行成功

http://www.xdnf.cn/news/667171.html

相关文章:

  • 【Linux】进程状态优先级
  • 【QT】在QT6中读取文件的方法
  • 私服 nexus 之间迁移 npm 仓库
  • Debian 11之解决daemon.log与syslog文件占用空间过大问题
  • pyspark实践
  • [yolov11改进系列]基于yolov11引入感受野注意力卷积RFAConv的python源码+训练源码
  • 手机收不到WiFi,手动输入WiFi名称进行连接不不行,可能是WiFi频道设置不对
  • Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心
  • 链表:数据结构的灵动舞者
  • Linux系统-基本指令(3)
  • 智能体赋能效率,企业知识库沉淀价值:UMI企业智脑的双轮驱动!
  • 【Quest开发】空间音频的使用
  • [AI]大模型MCP快速入门及智能体执行模式介绍
  • HJ25 数据分类处理【牛客网】
  • 小白成长之路-Linux程序与进程(一)
  • Linux 使用 Docker 安装 Milvus的两种方式
  • 记忆术-汉字部首编码记忆
  • APP广告变现,开发者如何判断对接的广告SDK安全合规?
  • CQF预备知识:一、微积分 -- 1.6.1 不定积分详解
  • ctf.show pwn入门 堆利用-前置基础 pwn142
  • 【刷题】数组拼接(超聚变暑期实习笔试)
  • MATLAB实现音频参数均衡器(PEQ)
  • 鸿蒙OSUniApp 实现的数字键盘与密码输入框组件#三方框架 #Uniapp
  • 用AxumStatusCode细化Rust Web标准格式响应
  • 动态防御新纪元:AI如何重构DDoS攻防成本格局
  • Spring Boot微服务架构(六):伪装的微服务有哪些问题?
  • npm error Cannot find module ‘negotiator‘ 的处理
  • 从Node.js到Go:如何从NestJS丝滑切换并爱上Sponge框架
  • Siege:开源的 HTTP/FTP 压力测试与基准评估工具!全参数详细教程!Kali Linux教程!
  • deepseek开源资料汇总