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

nginx日志分割


详细步骤

第零步:准备工作(创建脚本目录)

我们先把要用的脚本放在一个专门的目录里,方便管理。

# 在 web 用户家目录下创建一个名为 scripts 的目录
mkdir -p /home/web/scripts# 进入这个目录
cd /home/web/scripts
第一步:编写日志切割脚本

这是核心步骤。我们将创建一个 shell 脚本,来完成之前 logrotate 所做的所有事情。

  1. 创建脚本文件

    # 使用 vim 或 nano 创建脚本文件
    vim rotate_nginx_logs.sh
    
  2. 粘贴以下脚本内容

    请将下面所有的代码完整地复制并粘贴到 rotate_nginx_logs.sh 文件中。

    #!/bin/bash# =================================================================
    # Nginx Log Rotation Script for non-root users
    # Author: Your Name
    # =================================================================# --- 配置区 ---
    # 你的 Nginx 日志文件所在目录
    LOGS_PATH="/home/web/nginx/logs"# 你的 Nginx PID 文件路径
    PID_FILE="$LOGS_PATH/nginx.pid"# 保留多少天的日志(例如,保留14天的压缩日志)
    RETAIN_DAYS=14
    # --- 配置区结束 ---# --- 执行区 ---
    # 检查日志目录是否存在
    if [ ! -d "$LOGS_PATH" ]; thenecho "错误: 日志目录 $LOGS_PATH 不存在。"exit 1
    fi# 检查 PID 文件是否存在
    if [ ! -f "$PID_FILE" ]; thenecho "错误: Nginx PID 文件 $PID_FILE 未找到。"exit 1
    fi# 1. 移动(重命名)当前的日志文件
    # 使用昨天的日期来命名备份文件,更符合常规
    YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
    mv "$LOGS_PATH/access.log" "$LOGS_PATH/access.log-${YESTERDAY}"
    mv "$LOGS_PATH/error.log" "$LOGS_PATH/error.log-${YESTERDAY}"# 2. 通知 Nginx 重新生成新的日志文件
    # 这是最关键的一步,与之前手动操作完全一样
    kill -USR1 $(cat "$PID_FILE")# 等待一小会儿,确保新日志文件已创建
    sleep 5# 3. 压缩刚刚移动的旧日志文件
    gzip "$LOGS_PATH/access.log-${YESTERDAY}"
    gzip "$LOGS_PATH/error.log-${YESTERDAY}"# 4. 删除超过保留天数的旧日志文件
    # find 命令会查找所有超过 RETAIN_DAYS 天的 .gz 文件并删除它们
    find "$LOGS_PATH" -name "*.log-*.gz" -mtime +$RETAIN_DAYS -exec rm -f {} \;echo "Nginx 日志切割完成。"
    # --- 执行区结束 ---
    
  3. 保存并退出
    vim 中,按 ESC,然后输入 :wq 并回车。

第二步:给脚本添加执行权限

创建的脚本默认是没有执行权限的,我们需要给它加上。

# 确保你还在 /home/web/scripts 目录下
chmod +x rotate_nginx_logs.sh

现在你可以试着手动运行一下这个脚本,看看它是否能正常工作:

./rotate_nginx_logs.sh

如果一切正常,它会切割当前的日志,并输出 “Nginx 日志切割完成”。

第三步:设置定时任务 (Cron Job)

这是实现“自动化”的关键。我们将使用 crontab 命令来为 web 用户添加一个定时任务。

  1. 编辑当前用户的 crontab

    crontab -e
    

    第一次运行时,系统可能会让你选择一个默认的文本编辑器(如 nanovim),推荐选择 nano,因为它对新手更友好。

  2. 添加定时任务规则

    在打开的文件的最末尾,添加新的一行,内容如下:

    # 每天凌晨 00:01 执行 Nginx 日志切割脚本
    01 00 * * * /home/web/scripts/rotate_nginx_logs.sh > /dev/null 2>&1
    
  3. 规则解释

    • 01 00 * * *: 这是 cron 的时间格式,代表“每天的 00 点 01 分”。(分钟 小时 日 月 周)
    • /home/web/scripts/rotate_nginx_logs.sh: 这是要执行的脚本的绝对路径。
    • > /dev/null 2>&1: 这部分的意思是,将脚本执行过程中所有正常的输出(>)和错误输出(2>&1)都重定向到“黑洞”(/dev/null)里。这样做可以防止 cron 因为脚本有输出而给你发送邮件,保持系统干净。
  4. 保存并退出

    • 如果你用的是 nano,按 Ctrl + X,然后会提示你是否保存,按 Y,最后按 Enter 确认文件名。
    • 如果你用的是 vim,按 ESC,然后输入 :wq 并回车。

    保存后,系统会提示 crontab: installing new crontab,这表示你的定时任务已经成功设置好了!


总结

现在,你已经成功地在没有 root 权限的情况下,建立了一套完全属于 web 用户的、功能完备的自动化日志切割系统。

从现在开始:

  1. 每天凌晨 00:01cron 会自动触发你的 rotate_nginx_logs.sh 脚本。
  2. 脚本会重命名前一天的日志,并通知 Nginx 创建新日志文件。
  3. 脚本会压缩重命名后的日志文件。
  4. 脚本会自动删除14天前的旧压缩日志。

你再也不需要手动管理这些日志文件了。

http://www.lryc.cn/news/602485.html

相关文章:

  • Webhook技术深度解析:从原理到实现全指南
  • Cloudflare CDN 中设置地域限制并返回特定界面
  • DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进
  • nuttx串口驱动框架设计
  • HCIP笔记(第一、二章)
  • 设计模式(十六)行为型:解释器模式详解
  • 自定义View学习记录 plinko游戏View
  • 6、CentOS 9 安装 Docker
  • 状态反馈极点配置
  • 第三阶段—8天Python从入门到精通【itheima】-139节(pysqark实战-前言介绍)
  • mac电脑如何关闭防火墙
  • 本地大语言模型部署指南
  • 分布式渲染效能探析:关键网络性能要素
  • 前端基础之《Vue(25)—Vue3简介》
  • NSGA-II(Non-dominated Sorting Genetic Algorithm II) 算法求解 ZDT1 双目标优化问题
  • 【Java基础面试题】Java特点,八种基本数据类型
  • 【Zustand】从复杂到简洁:Zustand 状态管理简化实战指南
  • GTSuite许可证兼容性及要求
  • 【数据标注】详解使用 Labelimg 进行数据标注的 Conda 环境搭建与操作流程
  • 修改gitlab默认的语言
  • GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【四】
  • Java面试深度剖析:从JVM到云原生的技术演进
  • opencv学习(轮廓检测)
  • OpenCV(05)直方图均衡化,模板匹配,霍夫变换,图像亮度变换,形态学变换
  • UE5 UI自适应 DPI缩放
  • 【Spring WebFlux】 三、响应式流规范与实战
  • android-屏幕-刷新流程
  • 《深入剖析Kafka分布式消息队列架构奥秘》之Kafka基本知识介绍
  • MCU 中的 PWM(脉冲宽度调制)是什么?
  • uniapp 更新apk有缓存点不动,卸载安装apk没有问题。android