Logrotate是linux下的一个用于对日志文件分割,压缩或者发送邮件的的工具。当系统中的某个进程会定期生成大量的log文件时,logrotate可以定期(每天一次,每周一次等等)自动化的将这些log文件进行分割压缩,删除等操作。
一般情况下,logrotate是一个在/etc/corn.daily下的每天执行的cronjob,logrotate在一天之中也不会对log文件进行多次的修改,除非log文件压缩的标准时基于文件的大小或者使用了-f参数强制修改。
Logrotate的命令格式为:
logrotate [-dv] [-f|--force] [-s|--state file] config_file+
参数说明:
-v 输出执行过程说明
-d 开启debug模式
-f 强制执行操作,当我们手动修改/etc/logrotate.d目录下的配置是,加上该参数使得修改立即生效
-s 告诉logrotate使用一个备用的状态文件,默认状态文件时/var/lib/logrotate/status
举例说明logrotate的使用:
假设现在自己写的一个脚本在不断的生成monitor.log的日志,随着时间的增长该日志文件也将变得越来越大,为了便于处理,我们不希望该日志过大,因此我们希望该日志按照每天一次的分割频率分割成若干个小文件。
首先进入/etc/logrotate.d目录下,新建一个文件。命名问getMap,编辑该文件/root/zzx/monitor.log{
notifempty
daily
rotate 5
}
第一行:是日志文件所在的路径
第二行:notifempty表示当日志文件为空的时候就不需要分割了。若为空也需要分割,则填ifempty即可。
第三行:daily表示每天一次,weekly表示每周一次,monthly表示每月一次
第四行:rotate n表示日志在被rotate n次之后,就的日志将被移除或者mail到配置的地址中去,如果n=0,则表示直接移除旧的文件。
如果希望rotate仅仅在日志文件过大时执行,则可以加上一行
size <size>
表示在日志文件超过size的大小时,执行操作。
一个更复杂的例子
/data/log/keystone/*.log {
daily
missingok
rotate 5
compress
minsize 100k
create 640 keystone keystone
postrotate
if dpkg-vendor --derives-from ubuntu ; then
service keystone restart >/dev/null 2>&1 || true
else
invoke-rc.d keystone restart
fi
endscript
}
其中compress表示对日志进行压缩操作
Create表示需要新建日志文件,指明用户组和用户以及文件权限
Postrotate/endscript包围的是在rotate完成之后需要执行的脚本,对于有些进程,需要重新启动以便生成新的日志文件,否则将会出错。其中的脚本即为shell脚本,按照shell脚本的语法编写即可。
在配置完成之后,执行:
执行logrotate:
/usr/sbin/logrotate -vf /etc/logrotate.conf
若没有报错,查看/root/zzx/下面,会生成monitor.log.1文件,说明配置成功了。