Linux系统中,软件运行的时候会产生日志文件,而这些软件本身对日志不进行分割或者压缩处理,久而久之会导致日志文件异常巨大,影响机器性能,活磁盘空间不足。而logrotate就是管理这些日志文件的工具,可以对单个日志文件或者某个目录下的文件按时间或大小进行切割、 压缩归档,还可以在切割之后运行自定义命令。
系统会按照cron计划运行logrotate,通常以天为基础单位,在linux系统中计划每天运行的脚本通常位于 /etc/cron.daily/logrotate。也有一些系统不同,比如Gentoo,路径是在/etc/cron.daily/logrotate.cron。如果你想让logrotate运行频率更高(比如销售),你只需要用一个脚本来让cron运行 /etc/cron.hourly/logrotate.cron就可以了。当logrotate运行的时候,它会读取自身的配置文件来决定需要分割日志文件的路径,分割频率及保留多少个日志存档。
logrotate.conf 主配置文件:
logrotate的主要配置文件位于 /etc/logrotate.conf,该文件会合并include /etc/logrotate.d下所有配置文件。使用ls命令可以看到目录下的文件,这些文件包含着各个软件分割日志的设置:
logrotate实例
/var/log/apache.log {
rotate 4
daily
size 100m
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl restart > /dev/null
Endscript
}
rotate:指定分割日志的数量,该实例配置为4,如果日志数量已经到达4,当新的分割日志产生时,会删除最
老的一个。
daily 分割频率按天,还可以配置值:weekly monthly yearly
compress 对日志以gzip格式进行压缩
nocompress 不进行文件压缩
delaycompress:下次logrotate进行分割操作时再将本次分割的日志文件进行压缩操作
prerotate/endscript 在轮替之前执行之间的命令,prerotate与endscript成对出现。
postrotate/endscript logrotate每次分割文件后会运行 postrotate 后的命令,作用是让应用重启,以便切换到新的日
志文件。
sharedscripts:
这个命令的作用就是在运行postrotate里的脚本命令之前检查是否还有日志文件要分割,所有需要日志文件都分割完之后才会运行脚本命令。当然,如果没有日志文件需要分割,postrotate 里的脚本命令同样不会运行。例如,Nginx的access日志和error日志都被分割,那postrotate 里的脚本就会被运行两次,如果脚本命令里是重启服务器,那服务器就会被重启两次,这显然不是我们所希望的。这个时候就需要让logrotate在分割多个文件的时候只运行一次postrotate ,脚本设置命令sharedscripts
missingok 如果日志文件不存在,继续进行下一个操作
create 旧日志文件轮替后创建新的日志文件
dateext 轮替旧日志文件时,文件名添加-%Y %m %d形式日期,可用dateformat选项
扩展配置。
nodateext 旧日志文件不使用dateext扩展名,后面序数自增如"*.log.1"
dateformat 只允许%Y %m %d和%s指定符。注意:系统时钟需要设置到2001-09-09之
后,%s才可以正确工作
olddir 将轮替的文件移至指定目录下
ifempty 不论日志是否空,都进行轮替
notifempty 若日志为空,则不进行轮替