在nginx中设置定时切割日志,可以使用logrotate
工具,这个工具可以在Linux系统上自动轮换、压缩和删除旧日志文件,以确保日志文件不会无限增长,同时也可以防止磁盘空间不足。
安装logrotate
在Ubuntu或Debian上,可以使用以下命令安装logrotate:
代码语言:javascript复制sudo apt-get install logrotate
创建logrotate配置文件
在/etc/logrotate.d
目录下创建一个名为nginx
的文件:
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将继续记录新的日志文件,并且旧日志文件将被自动压缩和删除,从而确保磁盘空间不会被无限扩大。