需求
由于nginx的日志会不停地增大,所以需要我们自己去切割日志,方便管理,需要达到以下的效果:
- 按日期自动切割日志,最小单位是天。
- 当日志总量超过一定量时,自动直接清理日志,限定总量不能超过1000MB。
- 写入crontab定时任务里。
分析
- nginx日志目录下分别有access.log和error.log,按照日期自动切割日志则需要将每天的日志以”yyyymmdd_access/error.log”的格式保存下来,用mv重命名每一天的日志文件即可。
- 清理日志就简单了,只需要判断这个文件夹下的大小,然后将一定日期之前的日志文件清理掉就ok了。
- crontab任务也比较简单,详情可以看这里。
- 问题的关键在于,用mv重命名完昨天的日志文件后,nginx还是会向这个重命名后的文件(如access_20160409.log)写入日志,我们的目的是需要使nginx重新生成一个新的日志文件(access.log)并写入。
As we all know,linux系统下一切都是文件,所以每一个进程都有其文件描述符,而nginx进程将其自己的文件描述符写入了nginx.pid中,我们需要告诉nginx,让其重新打开一个新的日志文件(日志文件的配置详情可看这里