定期删除 OpenResty/Nginx 大日志文件的方法

1. 安装 logrotate 工具

首先,确保系统上已经安装了 logrotate。在大多数 Linux 发行版上,可以使用包管理器来安装:

bash 复制代码
sudo apt-get install logrotate # 对于 Debian/Ubuntu 
sudo yum install logrotate # 对于 CentOS/RHEL

2. 配置 logrotate

创建或编辑 logrotate 配置文件。例如,我们可以为 Nginx 日志创建一个自定义的 logrotate 配置文件 /etc/logrotate.d/nginx:

bash 复制代码
/var/log/nginx/access.log /var/log/nginx/error.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

这个配置文件的解释如下:

  • /var/log/nginx/access.log /var/log/nginx/error.log:指定要轮换的日志文件(可以包括多个文件)。
  • daily:每天轮换日志文件。
  • rotate 14:保留 14 天的日志文件。
  • compress:压缩旧的日志文件。
  • delaycompress:延迟一个轮换周期再压缩上一个轮换的日志文件。
  • missingok:如果日志文件不存在,不会报错。
  • notifempty:如果日志文件为空,不会轮换。
  • create 0640 www-data adm:创建新的日志文件,并设置权限和所有者。
  • sharedscripts:确保 postrotate 脚本只运行一次,而不是为每个被处理的日志文件运行一次。
  • postrotate:在日志文件轮换后运行的脚本,kill -USR1 命令通知 Nginx 重新打开日志文件。
csharp 复制代码
markdown
复制代码
# 定期删除 OpenResty/Nginx 大日志文件的方法

如果你的日志文件是一个大的单一日志文件,而不是多个文件的形式,你可以使用 `logrotate` 工具来管理和定期删除旧的日志内容。以下是详细的步骤:

## 1. 安装 logrotate 工具

首先,确保系统上已经安装了 `logrotate`。在大多数 Linux 发行版上,可以使用包管理器来安装:

```bash
sudo apt-get install logrotate   # 对于 Debian/Ubuntu
sudo yum install logrotate       # 对于 CentOS/RHEL

2. 配置 logrotate

创建或编辑 logrotate 配置文件。例如,我们可以为 Nginx 日志创建一个自定义的 logrotate 配置文件 /etc/logrotate.d/nginx:

bash 复制代码
bash
复制代码
/var/log/nginx/access.log /var/log/nginx/error.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

这个配置文件的解释如下:

  • /var/log/nginx/access.log /var/log/nginx/error.log:指定要轮换的日志文件(可以包括多个文件)。
  • daily:每天轮换日志文件。
  • rotate 14:保留 14 天的日志文件。
  • compress:压缩旧的日志文件。
  • delaycompress:延迟一个轮换周期再压缩上一个轮换的日志文件。
  • missingok:如果日志文件不存在,不会报错。
  • notifempty:如果日志文件为空,不会轮换。
  • create 0640 www-data adm:创建新的日志文件,并设置权限和所有者。
  • sharedscripts:确保 postrotate 脚本只运行一次,而不是为每个被处理的日志文件运行一次。
  • postrotate:在日志文件轮换后运行的脚本,kill -USR1 命令通知 Nginx 重新打开日志文件。

3. 测试 logrotate 配置

在应用配置之前,可以使用 logrotate 的 -d 参数来测试配置文件,而不实际执行日志轮换:

bash 复制代码
sudo logrotate -d /etc/logrotate.d/nginx

如果配置没有问题,可以手动触发一次日志轮换来验证效果:

bash 复制代码
sudo logrotate -f /etc/logrotate.d/nginx

4. 确保定期运行 logrotate

logrotate 通常由系统的 Cron 任务定期运行。可以通过查看 /etc/cron.daily/logrotate 来确认这一点:

bash 复制代码
cat /etc/cron.daily/logrotate

这个文件通常会包含一条执行 logrotate 的命令,例如:

bash 复制代码
/usr/sbin/logrotate /etc/logrotate.conf

通过这种方式,即使你的日志文件是一个大的单一文件,logrotate 也可以帮助你自动管理和定期删除旧的日志内容,确保日志文件不会无限制地增长。

相关推荐
架构技术专栏8 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
别动我齐刘海9 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈9 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
Wx-bishekaifayuan9 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan10 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe10 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
WeiXin_DZbishe11 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
玖石书11 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
A接拉起00711 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
xiaoqiMikko11 小时前
Linux 实战(七):useradd、sudoers、umask、SGID、软链 —— 三台真机实测
linux·centos