为什么想写日志切分,因为一直我好像没有研究过它如何实现,至于如何实现,的确也有多种方法,先写nginx官方推荐的吧。
Nginx官方推荐的日志切分方式
Log Rotation:官方推荐的日志切分实现
1 | $ mv access.log access.log.0 |
原理如下:
- 将access.log重命名为access.log.0,由于linux都采取文件描述符来读取文件,因此重命名文件后日志还将持续的向原文件写入
- USER1是linux中自定义的信号机制,nginx在收到该信号时会重新读取配置文件
- sleep 1秒能确保nginx将之前的旧日志文件能够彻底的关闭
具体实现
设想如果要定时的切分日志,那需要一个定时任务,来定时的对日志文件重命名并且引导nginx写入新的文件,而另一个shell脚本用来做具体的日志切割实现
定时任务
如何实现定时任务,有多种多样的solution,为了简单,我就使用mac上的crontab吧, crontab -e添加一行
1 | #每一分钟切割一次日志 |
日志切割脚本
1 | #! /bin/sh |
执行结果
1 | baidudeMacBook-Pro:log echo$ ls |
如上图所示,日志切分成功。
扩展阅读
5个使用Redis时需要注意的事项:对于Redis的使用和建议改了一些比较中肯的建议,很实用。