使用 logrotate 自动分割 nginx 日志
本文共 570 字。
版权声明:署名 | CC BY 4.0
某真〇萌论坛的日志量及其庞大,从
8 月到现在的 Nginx 日志竟有 44G。查阅资料,发现大多数 Linux 发行版默认使用 logrotate 对各种日志进行分割,且能满足我的需求。
需求分析
真〇萌论坛的日志量很大,为了节约服务器硬盘空间,有必要定期删除陈旧的日志文件。核心需求有两个:
- 保留
14 天以内的日志。 - 将日志按天分割到不同的文件里。
一种可行的解决方案
查阅资料,发现大多数
logrotate
是一个 linux 系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。 logrotate 是基于 crontab 运行的,所以这个时间点是由 crontab 控制的,具体可以查询 crontab 的配置文件 /etc/anacrontab。系统会按照计划的频率运行 logrotate,通常是每天。在大多数的 Linux 发行版本上,计划每天运行的脚本位于 /etc/cron.daily/logrotate。主流 Linux 发行版上都默认安装有 logrotate 包,如果你的 linux 系统中找不到 logrotate,可以使用 apt-get 或 yum 命令来安装。
设置/etc/logrotate.d/nginx
1 | /www/wwwlogs/www.masiro.me.log { |
项 | 含义 |
---|---|
daily | 按天切割 |
rotate | 保留 |
missingok | 切割中遇到日志错误忽略 |
notifempty | 日志如果为空将不进行切割和压缩 |
compress | 以 |
nodelaycompress | 不要将刚切割后的日志文件放到下个循环中进行压缩 |
copytruncate | 复制源日志文件后并清空源日志文件 |
dateext | 切割后的文件添加日志扩展名 |
dateformat | 扩展方式为 -%Y-%m-%d |
dateyesterday | 切割后的文件日志命名为昨天的日期 |
启用 logrotate 的自动任务
1 | logrotate /etc/logrotate.d/nginx |
强制当场运行 logrotate
1 | logrotate -vf /etc/logrotate.d/nginx |
Fin.