使用 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 后的效果:
[jerry@xxxxxxxx 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
使用 Linux 自带的 logrotate 程序来控制日志文件尺寸的更多相关文章
- 用 Linux自带的logrotate 来管理日志
大家可能都有管理日志的需要,比如定时压缩日志,或者当日志超过一定大小时就自动分裂成两个文件等.最近就接到这样一个小任务.我们的程序用的是C语言,用log4cpp的library来实现日志记录.但是问题 ...
- Linux自带神器logrotate详解
Linux自带神器logrotate详解 散尽浮华 运维 3天前 作者:散尽浮华 链接:https://www.cnblogs.com/kevingrace/p/6307298.html 对于 L ...
- 利用Linux自带的logrotate管理日志
日常运维中,经常要对各类日志进行管理,清理,监控,尤其是因为应用bug,在1小时内就能写几十个G日志,导致磁盘爆满,系统挂掉. nohup.out,access.log,catalina.out 本文 ...
- 用Linux自带的Logrotate来管理日志
Logrotate是由cron控制,cron在规定的时间执行 " logrotate /etc/logrotate.conf "命令.将对象日志进行转储,删除,压缩等操作... ...
- Linux环境下使用logrotate工具实现nginx日志切割
一. 前提背景及需求 nginx运行日志默认保存在nginx安装目录下的 /usr/local/nginx/logs 文件夹, 包含access.log和error.log两个文件. (1) acce ...
- Linux下Shell脚本运行程序不输出日志到终端
使用: 脚本路径/脚本名 >/dev/>& 说明: 可以简单的理解/dev/null是Linux下的回收站 >默认是把标准输出重定向 2>&1是把出错输出也定向 ...
- linux之使用cron,logrotate管理日志文件
1) logrotate配置 logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”. 我们可以根据日志文件的大小,也可以根据其天数来 ...
- 不错的linux下通用的java程序启动脚本
不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...
- Linux如何实现开机启动程序详解
我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. 加载内核LILO 启动之 ...
随机推荐
- Admin注册和路由分发详解
Admin注册和路由分发详解 1.启动 #autodiscover_modules('admin', register_to=site) 2.注册 1.单例对象 admin.site = AdminS ...
- vnc 搭建 转
这里要注意,关闭selinux setenforce 0 原文地址: http://www.linuxidc.com/Linux/2015-04/116725.htm 这是一个关于怎样在你的 Cent ...
- TaxonKit - A cross-platform and Efficient NCBI Taxonomy Toolkit
https://github.com/0820LL/taxonkit Usage: https://bioinf.shenwei.me/taxonkit/usage/
- C++ 提取网页内容系列之一
标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171179.html 欢迎转帖 请保持文本完整并注明出处 首先分析网页 ...
- Java流程控制语句
流程控制语句 内容: if... if...else if...else if...else switch...case for while do...while 分支结构if 接下来要学习的if条件 ...
- ABP框架系列之五十:(Swagger-UI-集成)
Introduction From it's web site: "....with a Swagger-enabled API, you get interactive documenta ...
- <Listener>HttpSessionListener和HttpSessionAttributeListener区别
一.HttpSessionListener HttpSessionListener是对Session的一个监听,主要监听关于Session的两个事件,即初始化和销毁.HttpSessionListen ...
- django扩展User认证系统
第一种方法proxy 如果你对Django提供的字段,以及验证的方法都比较满意,没有什么需要改的.但是只是需要在他原有的基础之上增加一些操作的方法.那么建议使用这种方式.示例代码如下: #在model ...
- 检索COM类工厂中CLSID为{10020100-E260-11CF-AE68-00AA004A34D5}的组件时失败,原因是出现以下错误:80040154
{"检索 COM 类工厂中 CLSID 为 {10020100-E260-11CF-AE68-00AA004A34D5} 的组件时失败,原因是出现以下错误: 80040154."} ...
- jQuery基础与JavaScript与CSS交互-第五章
目录 JavaScript框架种类及其优缺点 jQuery库 jQuery对象$ 掌握基本选择器 掌握过滤选择器 掌握表单选择器 RIA技术 常见的RIA技术 Ajax Sliverlight Fle ...