使用Logrotate和Crontab实现对nginx日志的按天分割

最近自己另一个小破站,日访问量破20w,紧随其后的就是nginx日志直接爆炸,5个G的nginx日志,这谁受得了。

打开ChatGPT,一顿猛问,还是有点收货的,我就稍微记录一下,以供日后查看。开淦!

1. 安装Logrotate和Crontab

2. Logrotate配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# /your-project-logrotate-path/your-project.conf

/your-project-logs-path/access.log
/your-project-logs-path/error.log {
# daily
hourly
missingok
dateext
# dateformat -%Y%m%d
dateformat -%Y%m%d%H
rotate 7
compress
delaycompress
notifempty
create 0644 root root
postrotate
docker exec nginx nginx -s reload
endscript
}

注意:postrotate属性配置了docker exec nginx nginx -s reload是因为在日志分割完成之后,如果不重启nginx,日志还是会继续写入分割之后的access.log-xxxxxxx中。

3. Crontab配置

  • 执行crontab -e,在配置文件中加入你自己的定时任务0 * * * * logrotate /your-project-logrotate-path/your-project.conf,保存搞定。

搞定

这样就配置好了,静坐等待日志文件的切割完成。

0%