«

Nginx日志按天切割logrotate轮转配置教程

时间:2026-11-14 07:16     作者:emer     分类: Nginx


前言

Nginx 访问日志默认持续写入一个文件,时间一长体积巨大,查看和分析都困难,甚至占满磁盘。logrotate 是系统自带的日志轮转工具,按天切割、压缩旧日志、保留指定天数。本文讲解为 Nginx 配置按天切割、重载信号、验证轮转的完整配置。

操作步骤

1. 新建 Nginx 切割配置

vi /etc/logrotate.d/nginx

写入:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

2. 参数说明

3. 手动测试一次轮转

logrotate -f /etc/logrotate.d/nginx

4. 查看切割结果

ls -lh /var/log/nginx/

5. 确认 logrotate 定时任务存在

cat /etc/cron.daily/logrotate

常见坑

  1. 切割后不发 USR1 信号,Nginx 仍写旧句柄,新日志进不了新文件。
  2. nginx.pid 路径与实际不一致,postrotate 命令失效。
  3. create 的属主属组写错,新日志无写入权限。
  4. rotate 天数设太短,历史日志查不到;太长又占磁盘。
  5. 只切割 access.log 漏了 error.log,通配 *.log 更稳妥。
  6. 自定义日志路径不在 /var/log/nginx,配置路径要改。
  7. 手动 -f 测试会立即切割,正式环境注意时机。

总结

Nginx 日志切割靠 logrotate:daily 按天、rotate 控制保留数、postrotate 发 USR1 让 Nginx 重开日志。配置后用 logrotate -f 测试,再看目录确认生成新文件。日志保留天数按合规和磁盘容量平衡,压缩旧日志节省空间。

遇到问题加QQ23979811 协助处理

标签: Nginx 运维 logrotate 日志切割