用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. Logrotate allows for the automatic rotation compression, removal and mailing of log files. Logrotate can be set to handle a log file daily, weekly, monthly or when the log file gets to a certain size.

为了使用它,主要有两个地方需要修改一下:一个是/etc/logrotate.conf,另一个是/etc/logrotate.d/下面的文件。

你既可以在logrotate.conf中直接定义如何处理你的log文件,也可以在/logrotate.d/下面针对自己的log新建一个对应的文件来定义处理log的行为。

这里是logrotate命令的详细解释的链接:http://linuxcommand.org/man_pages/logrotate8.html

下面是一个对Nginx日志进行定时切割压缩的例子:(Tomcat下的catalina.out日志同理

# cat  /etc/logrotate.d/nginx

/data/logs/nginx/*.log {
    rotate 365
    copytruncate
    create
    missingok
    notifempty    daily
    sharedscripts
    compress
    postrotate
    [ -f /var/run/nginx.pid  ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

monthly:说明是一个月进行一次处理,常用的还有daily,weekly。加上daily之后,日志格式会变成 *.log-20170313.gz

rotate 365:意思是说轮替时最多保留365个备份,多余的老的日志就被覆盖了。最新生成的始终为 *.1.gz ,依次往后推和进行覆盖

copytruncate: 的作用在于先复制一份当前日志文件用做处理,再清空源日志文件,让其继续接收日志。(清空但不删除日志文件)

create:处理完该日志文件后,新生成一个日志文件,当然尽可能是同名同权限等

olddir:定义了旧的日志存储在哪里

missingok:意思是如果上述*.log文件找不到的话也不报错,直接跳过

notifempty: 如果日志文件为空的话,则不进行rotate轮替操作

sharedscripts:和endscript对应,中间放脚本

prerotate: 在启动logrotate之前执行的命令或脚本,例如修改文件或目录的属性等

postrotate:在启动logrotate之后执行的命令或脚本,例如使某项服务重新载入配置文件,重新打开日志文件 (kill -HUP或 kill -USR1)

这里多说一句,kill -HUP与kill -USR1的区别仅在于kill -HUP会对进程进行复位操作,相当于/usr/local/nginx/sbin/nginx -s reload,而kill -USR1执行后主子进程号均不变

nocompress:说明旧日志不需要被压缩保存

minsize 1G: 日志最小1G,不到1G不轮替

logrotate定义了如何处理日志,而它本身则是被crond定时调用的。crond是一个Unix系操作系统中的定时调度软件,下面一段文字是从wiki上抄来的:

The software utility Cron is a time-based job scheduler in Unix-like computer operating systems. People who set up and maintain software environments use cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals. It typically automates system maintenance or administration—though its general-purpose nature makes it useful for things like connecting to the Internet and downloading email at regular intervals.

默认的logrotate是一天运行一次,它的脚本被放在/etc/cron.daily/下面。除了cron.daily外还有cron.weekly,cron.monthly,cron.hourly等分别对应不同的频率,你可以根据自己的需要把脚本放在不同的文件夹下面。在设置外所有东西以后,别忘了使用chkconfig crond on来保证它会一直开机运行。然后就大工告成了。

# cat /etc/cron.daily/logrotate (默认的)

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

如果想自定义执行时间的频率的话,自定义计划任务即可,例如下面:(每个整点执行一次)

0 * * * *  root  /usr/sbin/logrotate  -f  /root/nginx              -f, --force        Force file rotation

查看各log文件rotate的具体执行情况:

cat  /var/lib/logrotate.status

参考资料:http://www.cnblogs.com/tiantiandas/p/rsyslog.html

http://www.cnblogs.com/futeng/p/4785206.html

转载于天宇骑士

时间: 2024-10-12 09:17:52

用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新建一个对应的文件

CentOS Linux使用logrotate分割管理日志

logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间. logrotate命令格式: logrotate [OPTION...] <configfile> -d, --debug :debug模式,测试配置文件是否有错误. -f, --force :强制转储文件. -m, --mail=command :发送日志到指定邮箱. -s, --state=statefile :使用指定的状态文件.

使用 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 } 第一行是

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

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

Linux学习8---(用户和用户组管理)

1.用户和用户组     用户和用户组概念        用户:使用操作系统的人(Linux支持多个用户在同一时间登陆同一个操作系统)        用户组:具有相同权限的一组用户(Linux系统中可以存在多个用户组)     相关的配置文件        /etc/group:储存当前系统中所有用户组信息            Group:        x        :    123        :    abx,def,xyz            组名称:    组密码占位符:  

Linux命令工具基础04 磁盘管理

Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: human缩写,以人类易读方式显示结果(既带单位:比如M/G,如果不加这个参数,显示的数字以B为单位) $df -h /opt/app/todeav/config#df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-

Linux下取代top的进程管理工具 htop

一.htop 简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (for console or X terminals) and requires ncurses. Comparison between htop and top In 'htop' you can scroll the list vertically and horizontally to see all

使用logrotate管理日志

日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事.很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate. logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/var/log