使用 Linux 自带的 logrotate 程序来控制日志文件尺寸

1. 编写配置文件,内容如下(以 Amadeus 系统为例):

编写配置文件,放在 /etc/logrotate.d/xxxx 下,其中 xxxx 是自己取的名字,无需后缀。例如 Amadeus 系统中此文件是 /etc/logrotate.d/amadeus

/usr/local/tomcat_amadeus/logs/catalina.out {
    copytruncate
    daily
    dateext
    rotate 15
    compress
    missingok
    size 2000M
}

第一行是文件的全路径,大括号中的重要字段解释如下:

copytruncate 使用先拷贝文件再 truncate 原文件的方法来轮转,这种方法无需停应用,也不会有数据丢失。
daily 按天执行
dateext 轮转后的日志备份加上日期后缀
rotate 15 总共保留 15 份备份文件
compress 开启gzip压缩,能大幅减少日志备份的尺寸
missingok 日志文件不存在的时候不会报错(如果有多个配置,会继续执行)
size 2000M 只有文件大于 2000M 时才轮转

配置项的详细解释可以参考 man logrotate。

2. 设置 crontab 任务

logrotate 程序默认是作为系统全局的 daily 任务执行的,按理来说只需要编写好了配置文件就会自动执行。但我发现这样会有不工作的情况,因此显示地多配置了一个 crontab 任务来执行它,如下:

00 00 * * * /usr/sbin/logrotate -v /etc/logrotate.d/amadeus >> /home/jerry/logrotate.log 2>&1

将参数部分的配置文件路径替换成你自己的配置文件即可。要注意的是必须确保运行 crontab 的用户对日志文件及所在的目录有读写权限。建议直接使用运行 Tomcat 时的用户。

添加 crontab 的方法是使用对应的用户登录系统,执行 crontab -e,按上面的方式添加一行即可。

3. 查看,搜索日志备份

启用 logrotate 后的效果:

[[email protected] logs]$ ls -lh catalina.out*
-rw-r--r--. 1 jerry xxxxxxxx 2.2G Jan 14 14:52 catalina.out
-rw-r--r--. 1 jerry xxxxxxxx  93M Dec 30 00:00 catalina.out-20131230.gz
-rw-r--r--. 1 jerry xxxxxxxx  83M Dec 31 00:00 catalina.out-20131231.gz
-rw-r--r--. 1 jerry xxxxxxxx 110M Jan  1 00:00 catalina.out-20140101.gz
-rw-r--r--. 1 jerry xxxxxxxx 165M Jan  3 00:01 catalina.out-20140103.gz
-rw-r--r--. 1 jerry xxxxxxxx 111M Jan  4 00:01 catalina.out-20140104.gz
-rw-r--r--. 1 jerry xxxxxxxx 110M Jan  5 00:00 catalina.out-20140105.gz
-rw-r--r--. 1 jerry xxxxxxxx 106M Jan  6 00:00 catalina.out-20140106.gz
-rw-r--r--. 1 jerry xxxxxxxx 167M Jan  7 00:01 catalina.out-20140107.gz
-rw-r--r--. 1 jerry xxxxxxxx 208M Jan  8 00:01 catalina.out-20140108.gz
-rw-r--r--. 1 jerry xxxxxxxx 170M Jan  9 00:01 catalina.out-20140109.gz
-rw-r--r--. 1 jerry xxxxxxxx 194M Jan 10 00:01 catalina.out-20140110.gz
-rw-r--r--. 1 jerry xxxxxxxx 172M Jan 11 00:01 catalina.out-20140111.gz
-rw-r--r--. 1 jerry xxxxxxxx 119M Jan 12 00:00 catalina.out-20140112.gz
-rw-r--r--. 1 jerry xxxxxxxx 145M Jan 13 00:01 catalina.out-20140113.gz
-rw-r--r--. 1 jerry xxxxxxxx 181M Jan 14 00:01 catalina.out-20140114.gz

可以看到,启用了压缩后,每天几个G的日志占用的空间减少到只有100多M。

按这个配置,备份的日志文件都是被压缩过的,会带有 gz 扩展名。当需要查询、查看这些文件的时候,可以使用以下方法:

1. 查看:使用 zless
2. 查找字符串:使用 zgrep
3. 显示内容:使用 zcat
4. 还原文件:gunzip xxxx.gz

一般情况不建议用 gunzip 解压开,而是直接使用 zless,zcat 等工具。例如要从旧日志里 grep 一个关键字并做处理,可以这么做:

zgrep Exception catalina.out-20131230.gz

或者

zcat catalina.out-20131230.gz | grep Exception
时间: 2024-10-13 02:30:32

使用 Linux 自带的 logrotate 程序来控制日志文件尺寸的相关文章

用 Linux自带的logrotate 来管理日志

大家可能都有管理日志的需要,比如定时压缩日志,或者当日志超过一定大小时就自动分裂成两个文件等.最近就接到这样一个小任务.我们的程序用的是C语言,用log4cpp的library来实现日志记录.但是问题是log4cpp并不支持当日志超过一定大小时自动分裂的功能,只能从头覆盖之前的日志,但这显然不是我们想要的.经过一番搜索,我发现其实Linux自带的logrotate命令就能够实现这样的功能. 这是logrotate的一段简介: The logrotate utility is designed t

Linux自带的logrotate 来管理日志

起因:nginx日志以及服务日志竟然高达57G 大家可能都有管理日志的需要,比如定时压缩日志,或者当日志超过一定大小时就自动分裂成两个文件等,我发现其实Linux自带的logrotate命令就能够实现这样的功能. 为了使用它,主要有两个地方需要修改一下:一个是/etc/logrotate.conf,另一个是/etc/logrotate.d/下面的文件. 你既可以在logrotate.conf中直接定义如何处理你的log文件,也可以在/logrotate.d/下面针对自己的log新建一个对应的文件

用Linux自带的Logrotate来管理日志

Logrotate是由cron控制,cron在规定的时间执行 " logrotate  /etc/logrotate.conf "命令.将对象日志进行转储,删除,压缩等操作... 这是logrotate日志轮替工具的一段官方简介: The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files. Log

Linux自带 Logrotate 日志切割工具配置详解

Logrotate 程序是一个日志文件管理工具.用于分割日志文件,压缩转存.删除旧的日志文件,并创建新的日志文件,下面就对logrotate日志轮转的记录: 1.1 Logrotate配置文件介绍 Linux系统默认安装logrotate,默认的配置文件: /etc/logrotate.conf /etc/logrotate.d/ logrotate.conf:为主配置文件logrotate.d:为配置相关子系统,用于隔离每个应用配置(Nginx.PHP.Tomcat...)  Logrotat

linux之使用cron,logrotate管理日志文件

1) logrotate配置   logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”.   我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行.   logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail . logrotate 的配置文件是 /etc/logrotate.conf  主要参数如下表: 参数                         功能   co

jstack来分析。当linux出现cpu被java程序消耗过高时

我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2    18   0 1817m 776m 9712 S  3.3  4.9  12:03.24 java                                                                                           5284 co_ad    

Linux如何实现开机启动程序详解

Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. 加载内核LILO启动之后,如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核.请记住此时的计算机内存中还不存在任何操作系统,PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存.因此,内核就必须完整地加载到可用RAM的第一个兆字节之内.为了实现这个目的,内核是被压缩

linux实验二:SET-UID程序漏洞实验

SET-UID程序漏洞实验 20125113 赵恺 一.实验描述 Set-UID 是Unix系统中的一个重要的安全机制.当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限.例如,如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限.Set-UID允许我们做许多很有趣的事情,但是不幸的是,它也是很多坏事情的罪魁祸首. 因此本次实验的目标有两点: 1.欣赏好的方面,理解为什么Set-UID是需要的,以及它是如何被执行的. 2.注意坏的方面,理解它潜在的安全性问题.

linux查文件被哪些程序占用—fuser和lsof的使用

fuser 用途:使用文件或文件结构识别进程,即:查询都有哪些进程占用了制定的文件.目录.设备或套接字; lsof MTR fuser命令 用途:使用文件或文件结构识别进程,即:查询都有哪些进程占用了制定的文件.目录.设备或套接字;语法:fuser [-c|-d|-f] [-k] [-u] [-x] [-V] 文件/目录/套接字/设备 ...说明:fuser命令列出了本地进程的进程号,那些本地进程使用File参数指定的本地或远程文件.对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程.每个