温馨提示×

如何分割debian nginx日志

小樊
45
2026-09-22 13:48:41
栏目: 智能运维

在 Debian 上分割 Nginx 日志,常见做法有 logrotate(推荐)手动脚本/cron 两种方式。下面按实用程度说明。


一、使用 logrotate(Debian 默认方式,最推荐)

Debian 安装 Nginx 后,通常会自带 logrotate 配置:

/etc/logrotate.d/nginx

1. 查看现有配置

cat /etc/logrotate.d/nginx

典型内容示例:

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

2. 关键参数说明

  • daily:每天分割
  • rotate 14:保留 14 份
  • compress:压缩旧日志
  • notifempty:空日志不分割
  • kill -USR1:通知 Nginx 重新打开日志文件(不重启 Nginx

3. 手动测试 logrotate

logrotate -d /etc/logrotate.d/nginx   # 模拟执行
logrotate -f /etc/logrotate.d/nginx   # 强制执行

二、按时间自定义分割(例如每天 0 点)

logrotate 本身由 cron 调用:

/etc/cron.daily/logrotate

如果你想 每天 0 点切割

sudo nano /etc/logrotate.d/nginx

改为:

daily
dateext

并确保 cron 时间正确(一般不需要改)。


三、手动分割 Nginx 日志(无 logrotate)

1. 重命名日志

mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)

2. 让 Nginx 重新打开日志

kill -USR1 $(cat /var/run/nginx.pid)

3. 加入 cron

crontab -e
0 0 * * * mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +\%Y\%m\%d) && kill -USR1 $(cat /var/run/nginx.pid)

四、按大小分割(例如 100MB)

修改 logrotate:

size 100M

或:

daily
size 100M

五、常见坑

  • ❌ 直接 rm 日志文件 → Nginx 仍写入旧 inode
  • ✅ 必须 kill -USR1
  • ✅ 日志目录权限:www-data

六、推荐方案总结

场景 推荐
普通服务器 logrotate(默认)
自定义时间 logrotate + cron
无 root 脚本 + USR1

如果你愿意,我可以 根据你的 Nginx 版本和日志路径给你一份完整配置

0