nginx设置定时切割日志

2023-03-29 23:13:15 浏览数 (1)

在nginx中设置定时切割日志,可以使用logrotate工具,这个工具可以在Linux系统上自动轮换、压缩和删除旧日志文件,以确保日志文件不会无限增长,同时也可以防止磁盘空间不足。

安装logrotate

在Ubuntu或Debian上,可以使用以下命令安装logrotate:

代码语言:javascript复制
sudo apt-get install logrotate

创建logrotate配置文件

/etc/logrotate.d目录下创建一个名为nginx的文件:

代码语言:javascript复制
sudo nano /etc/logrotate.d/nginx

并将以下内容添加到文件中:

代码语言:javascript复制
/var/log/nginx/*.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
                /etc/init.d/nginx reload > /dev/null
        endscript
}

这将对/var/log/nginx目录下所有以.log结尾的文件进行日志切割。具体的配置说明如下:

  • daily:每天切割日志
  • missingok:如果日志文件不存在,则不发出警告
  • rotate 7:保留最近7个日志文件
  • compress:使用gzip压缩旧日志文件
  • delaycompress:在下一次轮换时压缩旧日志文件
  • notifempty:如果日志文件为空,则不进行轮换
  • create 0640 www-data adm:创建新日志文件,并设置文件权限
  • sharedscripts:在执行postrotate脚本之前,运行所有的prerotate脚本
  • postrotate:在日志文件轮换后,重新加载nginx以开始记录新的日志文件

测试logrotate配置

可以手动运行logrotate来测试配置是否正确:

代码语言:javascript复制
sudo logrotate -vf /etc/logrotate.d/nginx

这将强制执行日志切割并显示详细输出。

配置logrotate定时任务

在Ubuntu或Debian上,logrotate是由cron任务定期运行的。打开cron配置文件:

代码语言:javascript复制
sudo nano /etc/crontab

并添加以下行,以每天凌晨3点切割日志:

代码语言:javascript复制
0 3 * * * root /usr/sbin/logrotate /etc/logrotate.conf

保存并退出文件。

这样,logrotate将在每天凌晨3点自动运行,并根据上面的配置文件对nginx日志进行轮换。重启cron服务

cron服务必须重新启动以使更改生效。在Ubuntu或Debian上,可以使用以下命令重启cron服务:

代码语言:javascript复制
sudo systemctl restart cron

检查日志切割是否成功

可以检查/var/log/nginx目录下的日志文件是否按照配置进行轮换和压缩。

如果一切正常,nginx将继续记录新的日志文件,并且旧日志文件将被自动压缩和删除,从而确保磁盘空间不会被无限扩大。

0 人点赞