当前位置: 首页 > 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.查看结果

可以发现,已经执行成功

相关文章:

  • 【Java实战】集合排序方法与长度获取方法辨析(易懂版)
  • Python实现VTK-自学笔记(5):在三维世界里自由舞蹈——高级交互与动态可视化
  • 得物Java开发面试题及参考答案(下)
  • 力扣面试150题--完全二叉树的节点个数
  • 【数据结构】单链表练习
  • openresty+lua+redis把非正常访问的域名加入黑名单
  • 百度ocr的简单封装
  • AWS之AI服务
  • 基于Python的简易聊天机器人实现:从原理到实践
  • AWS WebRTC:获取信令服务节点和ICE服务节点
  • SAP-ABAP:在DEBUG过程中修改内表中的数据的方法详解
  • go并发与锁之sync.Mutex入门
  • 鸿蒙仓颉开发语言实战教程:自定义组件
  • ubuntu2x.xx网络不通如何解决
  • 使用requestAnimationFrame编写动画效果或者处理大量数据
  • 基于Java,SpringBoot,Vue,UniAPP宠物洗护医疗喂养预约服务商城小程序管理系统设计
  • OpenGL Chan视频学习-9 Index Buffers inOpenGL
  • Netty创新架构突破链接数瓶颈技术,如何应用于新能源汽车智慧充电桩?
  • Elasticsearch的运维
  • etcd:高可用,分布式的key-value存储系统
  • 渭南疫情最新政策/seo分析是什么意思
  • 广州 美容 公司 网站建设/免费创建网站
  • 网站文件上传完成后打开网站显示网站建设中怎么回事?/百度官网首页官网
  • php企业网站模板下载/网站seo具体怎么做?
  • 做电商网站需要会些什么/郑州网络推广哪家口碑好
  • 住房和城乡建设部网站安全分会/检测网站是否安全