博客 / Linux/ LNMP 环境 Nginx 日志自动按天切割与保留策略

LNMP 环境 Nginx 日志自动按天切割与保留策略

LNMP 环境 Nginx 日志自动按天切割与保留策略

LNMP 服务器 Nginx 日志按天分割与自动清理

在 LNMP 环境中,默认的 Nginx 日志会持续写入单个文件,长期运行会导致日志文件过大,不便管理和分析。通过日志切割脚本,可以将日志按天分割成单独文件,并自动清理旧日志。

一、下载与配置日志切割脚本

1. 下载脚本到服务器(例如 /root/ 目录):

wget -O /root/cut_nginx_logs.sh http://soft.vpser.net/lnmp/ext/cut_nginx_logs.sh

2. 编辑脚本,根据你的环境修改关键参数:

vi /root/cut_nginx_logs.sh

脚本中需要关注的主要配置参数如下:

# 设置 Nginx 日志文件存储的根目录
log_files_path="/home/wwwlogs/"

# 设置切割后日志的存储路径格式,默认按年/月/组织
# 例如:/home/wwwlogs/2025/03/access_20250315.log
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")

# 设置需要切割的日志文件名(不含 .log 后缀),多个名称用空格分隔
# 此处的名称应对应 /home/wwwlogs/ 目录下的实际文件,如 access.log, vpser.net.log
log_files_name=(access vpser.net licess)

# 设置 Nginx 可执行文件的路径(用于切割后重载配置)
nginx_sbin="/usr/local/nginx/sbin/nginx"

# 设置日志保留天数,超过此天数的旧日志文件将被自动删除
save_days=30

重要说明

  • log_files_name 数组中的名称必须与 log_files_path 目录下待切割的日志文件名(去掉 .log 后缀)完全一致。
  • 如果你的 Nginx 安装路径不同,请修改 nginx_sbin 变量。
  • save_days=30 表示仅保留最近30天的日志,更早的会自动删除。

二、设置定时任务自动执行

为了每天自动执行日志切割,需要添加一个 Cron 定时任务。

1. 编辑当前用户的 Cron 任务表:

crontab -e

2. 在打开的文件末尾添加以下一行,表示每天凌晨0点0分执行切割脚本:

0 0 * * * /bin/bash /root/cut_nginx_logs.sh

(注意:原文中的 00 000 0 是等效写法,均代表0点0分。)

3. 保存并退出编辑器。Cron 服务会自动加载新的配置。

三、脚本工作原理与验证

该脚本主要执行以下操作:

  1. 切割:将指定的日志文件(如 access.log)复制并重命名为带昨日日期的文件(如 access_20250315.log),然后清空原日志文件。
  2. 重载:向 Nginx 主进程发送 USR1 信号,使其重新打开日志文件,确保后续日志写入新的空文件。
  3. 清理:根据 save_days 设置,删除 log_files_path 下所有早于指定天数的 .log 文件。

你可以手动执行一次脚本以测试配置是否正确:

/bin/bash /root/cut_nginx_logs.sh

然后检查 /home/wwwlogs/ 目录下是否按年/月生成了新的日志文件,并且原日志文件已被清空。

发表评论

您的邮箱不会公开。必填项已用 * 标注。