一般来说,日志是任何故障排除过程中非常重要的一部分,但这些日志会随着时间增长。在这种情况下,我们需要手动执行日志清理以回收空间,这是一件繁琐的管理任务。为了解决这个问题,我们可以在 Linux 中配置 logrotate 程序,它可以自动执行日志文件的轮换、压缩、删除和用邮件发出。
我们可以配置 logrotate 程序,以便每个日志文件可以在每天、每周、每月或当它变得太大时处理。
如何每天自动的分割catalina.out或者大小达到5M时切割catalina.out
1.新建一个文件
在/etc/logrotate.d/ 目录下新建一个文件,命名随意。
1 /etc/logrotate.d/tomcat
2.复制下面的语句至上文新建的文件中
/var/log/tomcat/catalina.out { copytruncate daily rotate 7 compress missingok size 5M }
各个配置的具体含义:
- 确保/var/log/tomcat/catalina.out指向你服务器中的catalina.out的地址
- daily - 每天切割
- rotate - 保留最多七个文件
- compress - 压缩分割后的文件
- size - 当catalina.out大于5M时分割
如何起作用
- 每天晚上,cron daemon会自动执行/etc/cron.daily目录下的任务
- 这个会触发/etc/cron.daily/logrotate文件,logrotate一般是随linux按安装的。它会执行这个命令-“/etc/sbin/logrotate /etc/logrotate.conf”(注意空格)
- /etc/logrotate.conf 包含了/etc/logrotate.d目录下的所有脚本
- 这个会触发上一步你写的/etc/logrotate.d/tomcate文件
添加自动化任务
1 vi logrotate.sh
#!/bin/bash
/usr/sbin/logrotate /etc/logrotate.conf
chmod a+x logrotate.sh
2.添加自动化任务每天中午12点执行
00 12 * * * /usr/bin/sh logrotate.sh
----------------------------------------------------------------------------------------------------------------------------------
logrotate 是如何工作的
默认情况下,logrotate 命令作为放在 /etc/cron.daily
中的 cron 任务,每天运行一次,它会帮助你设置一个策略,其中超过某个时间或大小的日志文件被轮换。
命令: /usr/sbin/logrotate
配置文件: /etc/logrotate.conf
这是 logrotate 的主配置文件。logrotate 还在 /etc/logrotate.d/
中存储了特定服务的配置。确保下面的那行包含在 /etc/logrotate.conf
中,以读取特定服务日志配置。
include /etc/logrotate.d`
logrotate 历史: /var/lib/logrotate.status
重要的 logrotate 选项:
compress --> 压缩日志文件的所有非当前版本
daily,weekly,monthly --> 按指定计划轮换日志文件
delaycompress --> 压缩所有版本,除了当前和下一个最近的
endscript --> 标记 prerotate 或 postrotate 脚本的结束
errors "emailid" --> 给指定邮箱发送错误通知
missingok --> 如果日志文件丢失,不要显示错误
notifempty --> 如果日志文件为空,则不轮换日志文件
olddir "dir" --> 指定日志文件的旧版本放在 “dir” 中
postrotate --> 引入一个在日志被轮换后执行的脚本
prerotate --> 引入一个在日志被轮换前执行的脚本
rotate 'n' --> 在轮换方案中包含日志的 n 个版本
sharedscripts --> 对于整个日志组只运行一次脚本
size='logsize' --> 在日志大小大于 logsize(例如 100K,4M)时轮换