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

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

简介

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

1.创建切分日志的脚本

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

内容如下:

法1:每小时执行

bash 复制代码
#!/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" ];
then
    exit 1
fi

cd $logPath

if [ ! -d "$preDatePath" ];
then
    mkdir -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 

备注

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

bash 复制代码
#!/bin/bash

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

法2:每天执行

bash 复制代码
#!/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" ];
then
    exit 1
fi

cd $logPath

if [ ! -d "$preDatePath" ];
then
    mkdir "$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

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

bash 复制代码
*/2 * * * * run-parts /work/tmp &>>/work/tmp/log.txt

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

bash 复制代码
​1 * * * * run-parts /work/tmp &>>/work/tmp/log.txt

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

3.查看任务是否执行

如图所示,已经执行

4.查看结果

可以发现,已经执行成功

相关推荐
福建佰胜张工14 分钟前
深度解析 Allen-Bradley 150-B135NBDA 智能电机控制器:选型、参数与工业应用
运维·数据库·单片机·嵌入式硬件·安全·自动化
wefg120 分钟前
【Docker】镜像相关指令
运维·docker·容器
feng_you_ying_li42 分钟前
linux之网络层
linux·运维·网络
未来之窗软件服务1 小时前
Linux 运维日志删除的多种方式—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
卓豪终端管理1 小时前
IT 运维视角下的终端数据安全:能力框架与落地清单
运维
小雉系统1 小时前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
甜到心里的蛋糕1 小时前
从 QQ 机器人到 B 站 AI 运营:一套可复现的视频流水线踩坑实录
运维·人工智能·python·自动化·视频制作
QYR-分析1 小时前
26.2% 高增!场内及园区无人物流车,厂内短驳自动化的 L4 货运载体
运维·自动化
java_logo2 小时前
Docker 部署 DPanel:轻松搭建轻量容器管理平台
运维·docker·容器·podman·容器管理·dpanel·轩辕镜像
死磕音视频2 小时前
Open WebUI 入门:用 Docker 装上本地对话界面并连接 Ollama
docker·ollama·本地大模型·open webui