Nginx日志切割

news/2025/12/9 23:13:47/文章来源:https://www.cnblogs.com/yilangcode/p/19328697

自己部署的个人服务器,主要使用Nginx服务器来做转发和展示很多的静态页面内容,因此每天的日志还是比较多。

日志多了之后,不可能所有的日志都放在同一个文件中,这时候,就需要考虑日志切割,自己是准备按照天保存。

然后跟着千问提供的方案,一步一步地完成了日志切割,主要使用的是定时脚本。

 

.1.创建脚本(宿主机)

nano /opt/u01/exam/nginx/nginx_rotate.sh

 

.2.脚本内容如下-自己使用docker-compose来进行部署,因此脚本也是围绕该部署方式来写的

#!/bin/bash

 

# ======================

# Nginx Docker 日志按天切割脚本(适用于 docker-compose 部署)

# 功能:切割 access.log / error.log,通知 Nginx 重开日志,清理旧日志

# 作者:根据用户需求定制

# ======================

 

# --- 配置区(请根据实际情况修改)---

LOG_DIR="/xxx/exam/nginx/log"                # 宿主机挂载的 Nginx 日志目录

COMPOSE_FILE="/xxx/exam/docker-compose.yml"  # docker-compose.yml 的绝对路径

NGINX_SERVICE="nginx"                            # docker-compose 中 Nginx 服务名

RETAIN_DAYS=60                                   # 保留日志天数

LOG_OUTPUT="/var/log/nginx_rotate.log"           # 脚本自身运行日志(可选)

 

# --- 日志函数 ---

log() {

    local msg="[ $(date '+%Y-%m-%d %H:%M:%S') ] $*"

    echo "$msg" | tee -a "$LOG_OUTPUT" >&2

}

 

# --- 主逻辑 ---

log "开始执行 Nginx 日志切割任务..."

 

YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

 

# 1. 切割 access.log

if [ -f "${LOG_DIR}/access.log" ]; then

    mv "${LOG_DIR}/access.log" "${LOG_DIR}/access_${YESTERDAY}.log"

    log "已切割 access.log → access_${YESTERDAY}.log"

else

    log "警告:${LOG_DIR}/access.log 不存在,跳过切割"

fi

 

# 2. 切割 error.log

if [ -f "${LOG_DIR}/error.log" ]; then

    mv "${LOG_DIR}/error.log" "${LOG_DIR}/error_${YESTERDAY}.log"

    log "已切割 error.log → error_${YESTERDAY}.log"

else

    log "警告:${LOG_DIR}/error.log 不存在,跳过切割"

fi

 

# 3. 通知 Nginx 重开日志文件

sent_signal=false

 

# 尝试使用 docker compose(新版 Docker 内置)

if command -v docker >/dev/null && docker compose version >/dev/null 2>&1; then

    if docker compose -f "$COMPOSE_FILE" kill -s HUP "$NGINX_SERVICE" 2>/dev/null; then

        log "已通过 'docker compose' 向服务 '$NGINX_SERVICE' 发送 HUP 信号"

        sent_signal=true

    fi

fi

 

# 回退到 docker-compose(独立命令)

if [ "$sent_signal" = false ] && command -v docker-compose >/dev/null; then

    if docker-compose -f "$COMPOSE_FILE" kill -s HUP "$NGINX_SERVICE" 2>/dev/null; then

        log "已通过 'docker-compose' 向服务 '$NGINX_SERVICE' 发送 HUP 信号"

        sent_signal=true

    fi

fi

 

# 如果两种方式都失败

if [ "$sent_signal" = false ]; then

    log "错误:无法向 Nginx 发送 HUP 信号,请检查 Docker 环境或服务名"

    exit 1

fi

 

# 4. 清理超过 RETAIN_DAYS 天的日志

log "开始清理 ${RETAIN_DAYS} 天前的日志..."

find "${LOG_DIR}" -name "access_*.log" -mtime +$((RETAIN_DAYS)) -delete 2>/dev/null

find "${LOG_DIR}" -name "error_*.log" -mtime +$((RETAIN_DAYS)) -delete 2>/dev/null

log "日志清理完成"

 

log "Nginx 日志切割任务成功结束"

 

编辑方式-

打开脚本:nano /opt/u01/exam/nginx/nginx_rotate.sh

直接粘贴 / 修改内容(无需切换模式);

编辑完成后,按 Ctrl+O(字母 O) → 提示 “File Name to Write”,直接回车确认保存;

再按 Ctrl+X 退出 nano 编辑器。

image

 

 

检查脚本语法是否正确-

bash -n /opt/u01/exam/nginx/nginx_rotate.sh

image

 

 

.3.设置权限+定时任务

sudo chmod +x /opt/u01/exam/nginx/nginx_rotate.sh

 

sudo crontab -e

添加-

0 1 * * * /opt/u01/exam/nginx/nginx_rotate.sh  # 每天凌晨1点执行

 

.4.服务器测试效果,完全可行。

image

 查看具体日志

image

 

感谢千问 大模型。只能能够描述出具体的IT需求,它就能给我提供一个好的思路,还有就是辅助写代码。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/995698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6502 算术逻辑单元(ALU)

算术逻辑单元(ALU)是 CPU 的核心部件,负责 CPU 内的各种算术运算。现代 CPU 的 ALU 无疑相当复杂,想要从晶体管或逻辑门级别对它的工作原理进行说明几乎不现实。但是 6502 CPU 是一款颇具知名度但又相对简单的 8 位…

make出错立即终止

make出错立即终止Make编译时错误处理与日志输出解决方案 在使用 make -j4 编译 u-Boot(或其他项目)时,实现“错误触发所有线程终止”和“错误日志单独输出”,可通过 make 自身参数 + 脚本辅助实现,以下是两种核心…

Testing Reprised之关于基米

Testing Reprised之关于基米2025.11.10 奇迹就是小有遗憾 你不要有情绪,有情绪就去唱雨中曲(注:今年11月以后我没有什么创作了,就是没有诗和小说,但是会写一些小东西,汇集起来叫做忒思廷大重奏,不知道什么时候有…

Solon AI 开发学习19 - 结合 Solon Flow 实现 ReAct 效果

Solon Flow 是一个基于 YAML/JSON 配置的流程编排引擎,本文演示了其与 solon-ai 结合实现人机交互的 RcAct 流程。该流程通过 LLM 生成文章初稿后进入人工审核循环,支持根据反馈动态修改内容直至审核通过。核心流程包…

网络安全编程——基于Python达成的SSH通信(Windows执行)

网络安全编程——基于Python达成的SSH通信(Windows执行)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

2025 最新水磨石抗污剂厂家 TOP5 评测!环保高性能标杆榜单发布,守护石材持久美观。国内水磨石抗污剂品牌2025年度盘点 - 全局中转站

随着水磨石在商业空间、高端住宅及公共设施中的广泛应用,其易渗污、难养护的问题日益凸显,水磨石抗污剂市场需求持续攀升。本榜单基于产品环保性能、抗污效果持久性、适用场景广泛性及行业口碑四大核心维度,结合国内…

OTOFIX IM2 1-Year Update Subscription: Ensure Latest Vehicle Diagnostics for European/American Cars

Staying Ahead in Automotive Diagnostics: The OTOFIX IM2 One Year Update Service Problem: Outdated Data Holds Back Repairs In today’s rapidly evolving automotive landscape, European and American mechan…

深入解析:2025年11月11日 AI快讯

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

北京守嘉健康干细胞项目介绍 - 品牌排行榜单

守嘉(北京)健康管理有限公司,秉承“引领主动健康,解码生命未来”的理念,通过与生命科学领域的前沿机构北京九思九如健康科技有限公司和北京福安华生物科技有限公司的深度战略合作,整合顶尖科研与临床资源,正式推…

统计文本文件记录

$folderPath = Read-Host "Enter the folder path" function mainMenu { while($prompt -ne ){$totaLines = 0 $n = 0 Get-ChildItem -Path $folderPath -Filter *.txt -Recurse | ForEach-Object { $fileL…

2025最新水洗石抗污剂厂家TOP5评测!环保性能与抗污效果品牌双权威榜单发布,技术赋能重构景观防护生态 - 全局中转站

随着水洗石材料在园林景观、市政工程、商业空间等场景的广泛应用,其抗污防护需求日益凸显。水洗石抗污剂作为提升材料耐久性与美观度的核心产品,市场关注度持续升温。本榜单基于环保安全、抗污性能、场景适配、服务体…

When Ongeki Gets Stuck at the Aime Check

When I updated Ongeki to version 1.21i, I inexplicably ran into the problem of getting stuck at the Aime check. If you are encountering the same issue: I know this is totally messed up, but trust me �…

如果同一个子网中,设备超过255台,那会如何才能保证处于同一子网

要让超过 255 台设备处于同一子网,核心是 扩大网段容量—— 通过选择「网络位更短、主机位更长」的子网掩码(即 CIDR 标识中「/」后面的数字小于 24),让网段可容纳的设备数量超过 253 台(/24 的上限)。关键原理:…

Autel MaxiPRO MP808TS 1-Year Update Subscription: Keep Your Diagnostic Tool Updated Effective

The Challenge: Outdated Diagnostics in a Rapidly Evolving Market Modern vehicles are evolving at an unprecedented pace, with advanced ECUs, hybrid/electric systems, and complex safety protocols becomin…

需求的变更控制

目录1. “变更的影响是可以接受的。”理解方式典型实践2. “受到变更影响的所有人都接到通知并明白这一点。”理解方式典型实践3. “由合适的人选来作出接受变更的正式决定。”理解方式如果没有“正式决定”会发生什么…

在java中实现c#的int.TryParse方法

在java中实现c#的int.TryParse方法在Java中实现类似C#的 int.TryParse方法,确实能带来更安全、更优雅的编码体验(指数字转换)。在.net(c#)的mscorlib程序集中,以System.Int32(int的实际类型)为例,有如下TryParse…

【值得收藏】构建企业级智能体RAG系统:解决大模型五大痛点,让AI真正理解业务 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于微信小应用的茶叶茶具销售和管理系统(源码+论文+部署+安装)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

我的 OI 生涯(更新中)

生活记录而已,全是流水账,不喜勿喷。 坐标:FJ XM 于 2025-12-9 开始编撰。 内容不会涉及其他人。 前言 父母都是程序员,所以从小多多少少有接触一些编程,也为我日后 OI 的生涯打下了基础。 大概是五年级时,被朋友…

少儿编程哪家强?这几家机构不容错过! - 品牌测评鉴赏家

少儿编程哪家强?这几家机构不容错过!编程热下的选择难题 在当今数字化飞速发展的时代,少儿编程学习已然成为一股热潮。走在街头,时不时就能看到少儿编程培训机构的招牌;打开社交媒体,也总能刷到孩子们展示自己编…