Hugo博客公告弹窗

nginx日志logrotate轮转设置

如果不设置轮转,日志会越来越大,可以删除,但更推荐logrotate方式

logrotate 设置步骤:

检查文件所有者

ls -l /data/wwwlogs/
  1. 首先设置日志目录权限:
sudo chown root:root /data/wwwlogs/*
  1. 创建 logrotate 配置文件:
sudo nano /etc/logrotate.d/website_logs
  1. 写入以下配置:
/data/wwwlogs/*.access.log
/data/wwwlogs/*.error.log {
    size 500M
    missingok
    rotate 7
    compress
    delaycompress
    dateext
    dateformat -%Y%m%d
    copytruncate
    create 0644 root root
    sharedscripts
    postrotate
        [ -f /run/nginx/nginx.pid ] && kill -USR1 $(cat /run/nginx/nginx.pid)
    endscript
}

或者区别开

# access logs
/data/wwwlogs/*.access.log {
    size 500M
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    dateext
    dateformat -%Y%m%d
    copytruncate
    create 0644 root root
    su root root
    sharedscripts
    postrotate
        [ -f /run/nginx/nginx.pid ] && kill -USR1 $(cat /run/nginx/nginx.pid)
    endscript
}

# error logs
/data/wwwlogs/*.error.log {
    size 20M
    missingok
    rotate 5
    compress
    delaycompress
    notifempty
    dateext
    dateformat -%Y%m%d
    copytruncate
    create 0644 root root
    su root root
    sharedscripts
    postrotate
        [ -f /run/nginx/nginx.pid ] && kill -USR1 $(cat /run/nginx/nginx.pid)
    endscript
}
  1. 测试配置:
chmod 644 /etc/logrotate.d/website_logs
logrotate -d /etc/logrotate.d/website_logs

强制执行一次(如果需要)

sudo logrotate -f /etc/logrotate.d/website_logs

或者手动创建一个大文件来测试:

dd if=/dev/zero of=/data/wwwlogs/test.access.log bs=1M count=501

手动压缩已轮转的日志

sudo gzip /data/wwwlogs/*-20250301
  1. 检查定时任务是否正确设置
systemctl status logrotate.timer

如果未启用,则启用

sudo systemctl enable logrotate.timer
sudo systemctl start logrotate.timer
  1. 验证定时任务:
# 查看下次执行时间
systemctl list-timers logrotate.timer
  1. 监控日志大小:
# 查看当前日志大小
du -sh /data/wwwlogs/

# 查看压缩后的日志
ls -lh /data/wwwlogs/*.gz

# 查看各个日志文件大小
du -h /data/wwwlogs/* | sort -hr

配置说明:

  • 日志超过 500M 时轮转
  • 保留最近7天的日志
  • 使用日期作为后缀
  • 压缩旧日志(延迟一天)
  • 每天凌晨自动检查
  • Nginx 日志会自动重新打开

完成后:

  • 系统会在每天凌晨自动执行日志轮转
  • 超过 500M 的日志会立即轮转
  • 旧日志会被压缩
  • 超过7天的日志会被自动删除

宝塔面板

检查文件所有者

ls -l /www/wwwlogs/

创建 logrotate 配置文件:

sudo nano /etc/logrotate.d/website_logs

配置如下:

/www/wwwlogs/*[^error].log {
    size 500M
    missingok
    rotate 7
    compress
    delaycompress
    dateext
    dateformat -%Y%m%d-%H%M%S
    notifempty
    copytruncate
    create 0644 www root
    sharedscripts
    postrotate
        [ -f /www/server/nginx/logs/nginx.pid ] && kill -USR1 $(cat /www/server/nginx/logs/nginx.pid)
    endscript
}

/www/wwwlogs/*.error.log {
    size 500M
    missingok
    rotate 7
    compress
    delaycompress
    dateext
    dateformat -%Y%m%d-%H%M%S
    notifempty
    copytruncate
    create 0644 www root
    sharedscripts
    postrotate
        [ -f /www/server/nginx/logs/nginx.pid ] && kill -USR1 $(cat /www/server/nginx/logs/nginx.pid)
    endscript
}

说明:

  • logrotate 每天凌晨 00:00 自动执行
  • 每天凌晨自动检查所有日志
  • 如果日志超过 500M 就会轮转
  • 上次轮转的日志会被压缩(因为 delaycompress)
  • 保留最近7天的日志记录

手动执行轮转

sudo logrotate -f /etc/logrotate.d/website_logs

手动压缩

sudo gzip /www/wwwlogs/*-20250301

查看所有日志大小

du -h /www/wwwlogs/*.log | sort -hr

查看日志大小

du -sh /www/wwwlogs/
CC BY-NC-SA 4.0 转载请注明
最后更新于 2025-03-10 04:33
clarity统计