日志logrotate
logrotate简介
日志是Linux系统中最重要的部分之一,通过日志可以知道系统中正在发生什么或者发生过什么,极大的方便了系统管理,常见的linux发行版中都自带了logrotate程序来管理系统日志,当然logrotate也可以用来管理软件日志。使用logrotate有以下几点好处:
1.大多数系统自带,不用安装 2.配置简单,功能很强大 3.可靠性高
配置文件
默认的配置文件为:
/etc/logrotate.conf
/etc/logratate.d/logrotate.conf:为主配置文件
logrotate.d:为配置相关子系统,用于隔离每个应用配置(Nginx、PHP、Tomcat...)
Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,日志轮转是系统自动完成的。 实际运行时,Logrotate会调用配置文件/etc/logrotate.conf。
Logrotate可以由自动或者手动触发日志轮转:
logrotate -f /etc/logrotate.d/nginx
logrotate -f /etc/logrotate.d/php
不过正式执行前最好通过Debug选项来验证一下(-d参数)查看各log文件的具体执行情况
cat /var/lib/logrotate/logrotate.status具体logrotate命令格式如下:
logrotate [OPTION...] -d, --debug :debug模式,测试配置文件是否有错误。 -f, --force :强制转储文件。 -m, --mail=command :压缩日志后,发送日志到指定邮箱。 -s, --state=statefile :使用指定的状态文件。 -v, --verbose :显示转储过程。
切割介绍
比如以系统日志/var/log/message做切割来简单说明下: 第一次执行完rotate(轮转)之后,原本的messages会变成messages.1,而且会制造一个空的messages给系统来储存日志; 第二次执行之后,messages.1会变成messages.2,而messages会变成messages.1,又造成一个空的messages来储存日志! 如果仅设定保留三个日志(即轮转3次)的话,那么执行第三次时,则 messages.3这个档案就会被删除,并由后面的较新的保存日志所取代!也就是会保存最新的几个日志。 日志究竟轮换几次,这个是根据配置文件中的rotate参数来判定的。
看下logrotate.conf配置:
其他重要参数说明
logrotate日志切割轮询
由于Logrotate是基于CRON运行的,所以这个日志轮转的时间是由CRON控制的,具体可以查询CRON的配置文件/etc/anacrontab,过往的老版本的文件为(/etc/crontab)
查看轮转文件:/etc/anacrontab
使用anacrontab轮转的配置文件,日志切割的生效时间是在凌晨3点到22点之间,而且随机延迟时间是45分钟,但是这样配置无法满足我们在现实中的应用
现在的需求是将切割时间调整到每天的晚上12点,即每天切割的日志是前一天的0-24点之间的内容,操作如下:
取消日志自动轮转的设置
使用crontab来作为日志轮转的触发容器来修改Logrotate默认执行时间
nginx日志配置
tomcat日志配置
解决logrotate无法自动轮询日志的办法
现象说明: 使用logrotate轮询nginx日志,配置好之后,发现nginx日志连续两天没被切割,检查后确定配置文件一切正常,这是为什么呢??
强行启动记录文件维护操作,纵使logrotate指令认为没有需要,应该有可能是logroate认为nginx日志太小,不进行轮询。 故需要强制轮询,即在/etc/cron.daily/logrotate脚本中将 -t 参数替换成 -f 参数
最后最后重启下cron服务:
Last updated
Was this helpful?