使用logrotate自动分割nginx日志

某真〇萌论坛的日志量及其庞大,从8月到现在的Nginx日志竟有44G。查阅资料,发现大多数Linux发行版默认使用logrotate对各种日志进行分割,且能满足我的需求。

需求分析

真〇萌论坛的日志量很大,为了节约服务器硬盘空间,有必要定期删除陈旧的日志文件。核心需求有两个:

  1. 保留14天以内的日志。
  2. 将日志按天分割到不同的文件里。

一种可行的解决方案

查阅资料,发现大多数Linux发行版默认使用logrotate对各种日志进行分割,且能满足我的需求。

logrotate是一个linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间/大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。 logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,具体可以查询crontab的配置文件/etc/anacrontab。系统会按照计划的频率运行logrotate,通常是每天。在大多数的Linux发行版本上,计划每天运行的脚本位于/etc/cron.daily/logrotate。主流Linux发行版上都默认安装有logrotate包,如果你的linux系统中找不到logrotate,可以使用apt-getyum命令来安装。

设置logrotate的配置文件/etc/logrotate.d/nginx内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
/www/wwwlogs/www.masiro.me.log {
daily
rotate 14
missingok
notifempty
compress
nodelaycompress
copytruncate
dateext
dateformat -%Y-%m-%d
dateyesterday
}
其中各项的含义如1所示。

1: logrotate选项含义表
含义
daily按天切割
rotate保留14个日志文件
missingok切割中遇到日志错误忽略
notifempty日志如果为空将不进行切割和压缩
compressgzip方式压缩
nodelaycompress不要将刚切割后的日志文件放到下个循环中进行压缩
copytruncate复制源日志文件后并清空源日志文件
dateext切割后的文件添加日志扩展名
dateformat扩展方式为 -%Y-%m-%d
dateyesterday切割后的文件日志命名为昨天的日期

启用logrotate的自动任务

1
logrotate /etc/logrotate.d/nginx

强制当场运行logrotate

1
logrotate -vf /etc/logrotate.d/nginx

Fin.

0条搜索结果。