今天运维的产品线下新来的研发问我,机器上应用的日志是什么时刻切割压缩的。于是我上机器看,发现那些压缩后的日志文件创建时间都是非常有规律的:凌晨4:02分,且每周一次生成一次。当时第一反应就是crontab干的了,so easy嘛~。但找遍了crontab -l -u * 各个用户的定时任务,毛线也没有啊。
实在没办法,去/var/log/cron 下查看日志,总算有点线索了,在那个时间点,跑了这样一个任务 : /etc/cron.daily,又想起了鸟哥讲到的定时任务有分成按时、按天..写在相应的文件夹下,然后在/etc/crontab里设置执行时间。
果然,在cron.daily里面找到了logrotate这个脚本,里面的内容很简单,核心就是这条命令:
/usr/sbin/logrotate /etc/logrotate.conf 。
好啦,绕了这么久,最终定位到logrotate.conf 这个文件了(菜鸟一枚,经验欠缺哈)。Linux自带的命令logrotate会根据你的需求去执行,只需要将配置项写在logrotate.conf里面就行了。下面将介绍一些常用的配置项:
-
dateext: 切割后的日志会加上这种格式日期:yyyymmdd,而不是简单的加上数字(默认下,cron的日志文件也会被切割,切完之后是cron.1;cron.2这样)
-
compress: 对日志进行压缩(灰常常用的)
-
daily|weekly|monthly|yearly: 这就比较好理解啦,就是制定切割周期,按每日、周、月、年进行切
-
rotate *: "*"是一个数字,表示会将切割后的日志保存几份,比如cron的日志,Linux默认情况下保留了4份(所以我们在/var/log/下会看到 cron.1-4这四个文件)
-
create [mode owner group]:表示对旧的日志进行切割后,马上会生成一个新的日志文件,可选项里指定这个文件的mode 拥有者和用户组(很强大的说)。当然像nginx这种,传一个重打日志的信号量进去,就会创一个新日志文件啦~~
-
postrotate/endscript (同样常用): 表示在切割动作完成后,将想要运行的命令写在这对组合之间,这两个配置项是一组滴,缺一不可。(常用于切割后,重启进程或者bla bla..)
-
maxage * (常用): * 同样是数字,表示切割后的日志将保存多少天,超过这个天数的切割后的日志将会丢掉。如果你配置了mail,这些超过天数的日志将会以邮件的形式发送过去(发邮件这种貌似用得不太多吧)
-
missingok ||nomissingok: 如果目标日志文件不存在,是否会报错(根据词义很好理解嘛)
-
notifempty||ifempty: 如果目标日志文件为空,将不会执行切割;后面那条表示即使为空也切
-
copytruncate: 将目标日志文件复制之后,再将该文件清空
-
size * :表示当日志文件大于一个值之后,才会进行切割,比如 100M 或者 300K
logrotate 非常强大,上面只是列出来了一些比较常用到的配置项~~
阅读(2807) | 评论(0) | 转发(0) |