logrotate---日志分割
logrotate命令用于对系统日志进行轮转、压缩和删除,也可以将日志发送到指定邮箱。使用logrotate指令,可让你轻松管理系统所产生的记录文件。每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件,预设的配置文件存放在/etc/logrotate.conf文件中。
语法
logrotate(选项)(参数)
选项
-?或--help:在线帮助; -d或--debug:详细显示指令执行过程,便于排错或了解程序执行的情况; -f或--force :强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然; -s<状态文件>或--state=<状态文件>:使用指定的状态文件; -v或--version:显示指令执行过程; -usage:显示指令基本用法。
参数
配置文件:指定lograote指令的配置文件。
详解:
我发现很多人的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!
Logrotate的介绍
显而易见,Logrotate是基于CRON来运行的,其脚本是「/etc/cron.daily/logrotate」:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
实际运行时,Logrotate会调用配置文件「/etc/logrotate.conf」:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
这里的设置可以理解为Logrotate的缺省值,当然了,可以我们在「/etc/logrotate.d」目录里放置自己的配置文件,用来覆盖Logrotate的缺省值。
Logrotate的演示
按天保存一周的Nginx日志压缩文件,配置文件为「/etc/logrotate.d/nginx」:
/usr/local/nginx/logs/*.log {
daily
dateext
compress
rotate 7
sharedscripts
postrotate
kill -USR1 `cat /var/run/nginx.pid`
endscript
}
如果你等不及CRON,可以通过如下命令来手动执行:
shell> logrotate -f /etc/logrotate.d/nginx
当然,正式执行前最好通过Debug选项来验证一下,这对调试也很重要:
shell> logrotate -d -f /etc/logrotate.d/nginx
BTW:类似的还有Verbose选项,这里就不多说了。
Logrotate的疑问
问题:sharedscripts的作用是什么?
大家可能注意到了,我在前面Nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。
问题:rotate和maxage的区别是什么?
它们都是用来控制保存多少日志文件的,区别在于rotate是以个数为单位的,而maxage是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了。
问题:为什么生成日志的时间是凌晨四五点?
前面我们说过,Logrotate是基于CRON运行的,所以这个时间是由CRON控制的,具体可以查询CRON的配置文件「/etc/crontab」,可以手动改成如23:59等时间执行:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 59 23 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
如果使用的是新版CentOS,那么配置文件为:/etc/anacrontab。
问题:如何告诉应用程序重新打开日志文件?
以Nginx为例,是通过postrotate指令发送USR1信号来通知Nginx重新打开日志文件的。但是其他的应用程序不一定遵循这样的约定,比如说MySQL是通过flush-logs来重新打开日志文件的。更有甚者,有些应用程序就压根没有提供类似的方法,此时如果想重新打开日志文件,就必须重启服务,但为了高可用性,这往往不能接受。还好Logrotate提供了一个名为copytruncate的指令,此方法采用的是先拷贝再清空的方式,整个过程中日志文件的操作句柄没有发生改变,所以不需要通知应用程序重新打开日志文件,但是需要注意的是,在拷贝和清空之间有一个时间差,所以可能会丢失部分日志数据。
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
安装
yum install logrotate cron
安装后系统会定时运行logrotate,一般是每天一次。系统是这么实现按天执行的。crontab会每天定时执行/etc/cron.daily目录下的脚本,而这个目录下有个文件叫logrotate。在centos上脚本内容是这样的:
/etc/cron.daily/logrotate:
- /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
此文件中只是执行了logrotate命令,然后传递一个配置参数。我们可以新建自己的脚本来执行logrotate命令,然后把脚本加入crontab中,就可以自定义文件分割了。
logrotate参数
| 参数 | 描述 |
|---|---|
| compress | 通过gzip 压缩转储以后的日志 |
| nocompress | 不需要压缩时,用这个参数 |
| copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断 |
| nocopytruncate | 备份日志文件但是不截断 |
| create mode owner group | 转储文件,使用指定的文件模式创建新的日志文件 |
| nocreate | 不建立新的日志文件 |
| delaycompress | 一起使用时,转储的日志文件到下一次转储时才压缩 |
| nodelaycompress | 覆盖 delaycompress 选项,转储同时压缩。 |
| errors address | 专储时的错误信息发送到指定的Email 地址 |
| ifempty | 即使是空文件也转储,这个是 logrotate 的缺省选项。 |
| notifempty | 如果是空文件的话,不转储 |
| mail address | 把转储的日志文件发送到指定的E-mail 地址 |
| nomail | 转储时不发送日志文件 |
| olddir directory | 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
| noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
| prerotate/endscript | 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行 |
| postrotate/endscript | 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行 |
| daily | 指定转储周期为每天 |
| weekly | 指定转储周期为每周 |
| monthly | 指定转储周期为每月 |
| rotate count | 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 |
| tabootext [+] list | 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ |
| size size | 当日志文件到达指定的大小时才转储,后缀MB. |
实战
新建配置文件:logrotate.conf,内容如下:
- /home/project/route/route.out{
- nocompress
- copytruncate
- create 0664 root root
- nomail
- rotate 10
- size 1M
- }
新建脚本 logrotate.sh,内容如下:
/usr/sbin/logrotate /home/project/route/logrotate.conf
- 1
加入crontable:内容如下:
- [root@hadoop4 route]# crontab -e
- * * * * * /home/project/route/logrotate.sh >/home/project/route/aaa.log 2>&1
程序运行一段时间后结果如下:
- -rw-r--r--. 1 root root 641345 12月 15 14:41 route.out
- -rw-r--r--. 1 root root 1093908 12月 15 14:41 route.out.1
- -rw-r--r--. 1 root root 1883706 12月 15 14:40 route.out.2
文件已经被分割了转储了。
logrotate---日志分割的更多相关文章
- logrotate 进行nginx日志分割
http://www.williamsang.com/archives/1254.html 日志分割常用方法: 自己写脚本分割 使用linux自带的logrotate 前者灵活,可以应对各种需求,自定 ...
- logrotate实现Mysql慢日志分割
MySQL慢日志? MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询 ...
- 使用logrotate做nginx日志分割
版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=266 背景 nginx是一款非常优秀的网络代理工具,但是其日志管理有点缺憾:nginx的access_log会无 ...
- Nginx-Tomcat 等运维常用服务的日志分割-logrotate
目录 一 .Nginx-Tomcat 等常用服务日志分析 Nginx 日志 Tomcat日志 MongoDB 日志 Redis 日志 二 .日志切割服务 logrotate 三.日志切割示例 Ngin ...
- 利用logrotate工具对catalina.out进行日志分割实战
logrotate是linux自带的日志分割工具,如果没有可以用yum安装 yum -y install logrotate 要配置日志分割定时任务,需要在/etc/logrotate.d/下创建一个 ...
- nginx 直接在配置文章中设置日志分割
直接在nginx配置文件中,配置日志循环,而不需使用logrotate或配置cron任务.需要使用到$time_iso8601 内嵌变量来获取时间.$time_iso8601格式如下:2015-08- ...
- logrotate 日志管理
查看logrotate 是否已安装 因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了.总结起来就是这样几类: 1.rpm包安装的,可以用rpm -qa看到,如果要查找 ...
- apache2.4配置访问日志分割并过滤图片CSS等无用内容
相关信息 1.apache日志有访问日志和错误日志,错误日志根据日志级别来输出错误信息,而访问日志根据定义的日志格式来记录访问动作 2.访问日志格式在httpd.conf文件里面定义,在虚拟主机里面引 ...
- Nginx常用日志分割方法
方式一: nginx cronolog日志分割配置文档,根据下面方法,每分钟分割一次NGINX访问日志. 1.nginx日志配置 access_log /var/log/nginx/access.lo ...
- python 跨模块实现按照文件大小,日期实现日志分割,反转
笔者的一个自动化测试平台项目,采用了python作为后端服务器语言.项目基于快速成型目的,写了一个极其简陋的日志记录功能,支持日志记录到文件和支持根据日志级别在终端打印不同颜色的log.但随着测试平台 ...
随机推荐
- Mac or windows eclipse配置tomcat
1.选择window --> Preferences 首选项 2.选择server --> Runtime Environements --> Add 3.选择对应的tomcat版本 ...
- settings.xml配置的镜像
<localRepository>D:/apache-maven-3.5.4/maven-jar/repository</localRepository> <mirror ...
- [LNOI2014]LCA 树链剖分 离线 前缀和 思维题
题目描述:给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. 有q次询问,每 ...
- Linux/Mac vi命令详解
刚开始学着用Linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...
- 关于PHPExcel上传Excel单元格富文本和时间类型读取数据问题
当用PHPExcel做Excel上传文件读取数据时,print_r出来的数据,竟然发现其中有几个单元格返回的是PHPExcel富文本对象,而且时间类型的单元格返回的是一个不是时间戳的五位数.就像下图那 ...
- HDU-1225 Football Score 模拟问题(水题)
题目链接:https://cn.vjudge.net/problem/HDU-1225 水题 代码 #include <algorithm> #include <string> ...
- ubuntu -redis
ubentu 布置redis,基本操作和CentO感觉相差不多,主要是使用命令有所差异 mark如下: ① download ② tar -zxvf xxx.tar.gz ③ cd redis-xxx ...
- Java基础学习总结(22)——异常处理
一.异常的概念 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要. package cn.javastudy.summary; public ...
- 网络芯片应用:GPS公交车行驶记录仪
项目描写叙述 佛罗里达大学学生 Miles Moody 使用WIZnet W5200以太网插板及Arduino Nano剖析了来自一个当地网页服务的HTML代码,并讲述了他每天带着公交车实时GPS坐标 ...
- POJ 3189 二分+Dinic
题意: 思路: 二分跨度 枚举最低座次 建图:源点向每头牛连边权为1的边 每头牛向当前枚举的B的区间这段连上边权为1的边 所有座次向汇点连边权为牛棚容量的边 判判流量是不是等于n 一开始写得是直接枚举 ...