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

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.lryc.cn/news/2394924.html

相关文章:

  • OpenCv高阶(十八)——dlib人脸检测与识别
  • 中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航
  • WIN11+CUDA11.8+VS2019配置BundleFusion
  • WPF prism
  • 实时同步缓存,与阶段性同步缓存——补充理解《补充》
  • [Redis] Redis:高性能内存数据库与分布式架构设计
  • Mobaxterm解锁Docker
  • React 第四十九节 Router中useNavigation的具体使用详解及注意事项
  • 【JavaEE】Spring事务
  • Flink 状态管理深度解析:类型与后端的全面探索
  • Android15 userdebug版本不能remount
  • R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题
  • k8s Headless Service
  • Linux上安装MongoDB
  • Redis最佳实践——安全与稳定性保障之访问控制详解
  • 【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
  • Halcon
  • STM32之IIC(重点)和OLED屏
  • 学习海康VisionMaster之表面缺陷滤波
  • 游戏引擎学习第314天:将精灵拆分成多个层
  • 【学习笔记】深度学习-梯度概念
  • 【数据结构】图的存储(邻接矩阵与邻接表)
  • tomcat yum安装
  • 【Elasticsearch】suggest_mode
  • 数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)
  • 从翻译后修饰角度解析人工合成途径与底盘细胞的适配性-文献精读136
  • Cesium快速入门到精通系列教程一
  • [Windows] 剪映 视频编辑处理
  • 决策树 GBDT XGBoost LightGBM
  • stm32 / arduino TPL0401A使用教程