日志文件包含系统内部执行情况的有用信息。在排除故障或服务器性能分析时往往需要检查日志。对于繁忙的服务器,日志文件可能会在短时间内变得非常大。这将成为一个问题,因为服务器会很快耗尽存储空间。此外,操作一个非常大的日志文件往往会非常棘手。
logrotate 是可以自动转储、压缩和删除旧日志文件的一个非常有用的工具。例如,你可以设置logrotate将日志文件 /var/log/foo的每30天转储一次,并且删除超过6个月的记录。一旦配置完成,logrotate可以完全自动化操作不需要进行人工交互
在主要的Linux发行版中logrotate包通常是默认安装的。如果由于某种原因,logrotate的不存在,您可以使用apt-get或者yum的命令来安装它。
Debian或者Ubuntu
# apt-get install logrotate cron
Fedora, CentOS或者RHEL
# yum install logrotate crontabs
logrotate的配置文件是/etc/logrotate.conf,一般不需要修改。可以在/etc/logrotate.d/目录下放入单独的配置文件定义本文档中需要的功能。
在第一个例子中,我们将创建一个10 MB的日志文件/var/log/log-file。我们将看到我们如何使用logrotate来管理这个日志文件。 我们首先创建一个10M的日志文件,并用随机位来填充它。
# touch /var/log/log-file# head -c 10M < /dev/urandom > /var/log/log-file
日志文件已经准备就绪,我们将配置logrotate转储这个日志文件。让我们开始创建转储所需要的logrotate配置文件。
# vim /etc/logrotate.d/log-file
/var/log/log-file { monthly
rotate 5 compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript}
其中:
上面的模板是通用的,配置参数可以根据您的要求各不相同。不是所有的参数可能是必要的。
在这个例子中,我们想要只在日志文件大小增长超过50MB时转储日志文件。
# vim /etc/logrotate.d/log-file
/var/log/log-file { size=50M rotate 5 create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript}
我们希望旧的日志文件根据归档日期进行命名,这可以通过添加dateext参数来实现。
# vim /etc/logrotate.d/log-file
/var/log/log-file { size=50M rotate 5 create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript}