logrotate 是 linux 系统自带的一个日志工具,用来对日志文件进行自动轮转、压缩、删除和邮寄等操作

在/etc/logrotate.d/目录下创建 nginx 文件,填入下面内容

/usr/local/nginx/logs/*.log {
    monthly
    missingok
    rotate 12
    compress
    delaycompress
    notifempty
    create 0640 kk wheel
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}
  • ​monthly​:每月分片一次。daily​ ​则是每天分片

  • ​rotate 12​:保留最近 12 个月的日志文件。如果是 daily​,那么这里的 12 则是保留最近 12 天日志

  • ​compress​:使用 gzip 压缩旧日志文件。

  • ​delaycompress​:延迟压缩,直到下一次分片时才压缩。

  • ​create 0640 kk whell​:创建新日志文件时,设置文件权限为 0640,所有者为 kk,组为 wheel(根据实际情况调整)。

  • ​postrotate​:分片后执行的脚本,通知 Nginx 重新打开日志文件。

测试配置

sudo logrotate -d /etc/logrotate.d/nginx

-d 则表示调试模式,不会真的分片

强制执行一次分片

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