Linux的logrotate是什么

发布时间:2021-12-01 09:28:43 作者:iii
来源:亿速云 阅读:154

这篇文章主要讲解了“Linux的logrotate是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux的logrotate是什么”吧!

登录到web服务上,上来 df -h 一把,果然,挂的一个共享又被撑爆。

root@websrv001 ~ # df -h  Filesystem            Size  Used Avail Use% Mounted on  /dev/mapper/rootvg-rootvol                         12G  5.6G  5.6G  50% /  tmpfs                  14G     0   14G   0% /dev/shm  /dev/sda1             477M   84M  368M  19% /boot  /dev/mapper/rootvg-homevol                        2.0G  4.0M  1.9G   1% /local/home  /dev/mapper/rootvg-tmpvol                        1.1G  252M  793M  25% /tmp  /dev/mapper/rootvg-varvol                        5.8G  1.1G  4.5G  20% /var  /dev/mapper/fsvol                        298G  298G     0 100% /net/fsvol  tmpfs                  14G     0   14G   0% /var/tmp

上次是因为liferay的log太大,这次再看看liferay的log

root@websrv001 ~ # ll -h /data/tomcat/storage/BU001/liferay/logs/  total 199M  drwxr-xr-x 2 tomcat tomcat 4.0K Apr 20 13:14 .  drwxr-xr-x 5 tomcat tomcat 4.0K Mar 14  2016 ..  -rw-r--r-- 1 tomcat tomcat 1.5M Apr 13 23:59 liferay.2020-04-13.log.gzipped_on_2020-04-17.gz  -rw-r--r-- 1 tomcat tomcat 2.5M Apr 14 23:59 liferay.2020-04-14.log.gzipped_on_2020-04-18.gz  -rw-r--r-- 1 tomcat tomcat 7.8M Apr 15 23:59 liferay.2020-04-15.log.gzipped_on_2020-04-19.gz  -rw-r--r-- 1 tomcat tomcat  31M Apr 17 23:58 liferay.2020-04-17.log  -rw-r--r-- 1 tomcat tomcat 7.0M Apr 18 23:59 liferay.2020-04-18.log  -rw-r--r-- 1 tomcat tomcat  90G Apr 20 17:54 liferay.2020-04-20.log

我列个去,尼玛,一个liferay log文件,能增长到90G,这也太扯了 吧。果断删掉,不知道为什么,每当我要敲rm -rf的时候,心里就莫名的紧张。。。

root@websrv001 ~ # rm -rf /data/tomcat/storage/BU001/liferay/logs/liferay.2020-04-20.log

重启一下服务

root@websrv001 ~ # service tomcat restart

随后通知了一下开发组那哥们儿,服务器磁盘已经清理,服务已经重启,那边也确认了web服务又活了,可以用了。随后,又检查了一下其它文件夹,结果发现catalina.out这个日志文件,又是超级无敌大:89G,我也是醉了。

root@websrv001 ~ # ll -h /data/tomcat/server/BU001/logs/  total 104G  drwxrwxr-x  2 root   tomcat  12K Apr 20 04:45 .  drwxr-xr-x 13 root   root   4.0K Apr 16 17:26 ..  -rw-r--r--  1 tomcat tomcat 5.1K Apr 13 10:28 catalina.2020-04-13.log.gz  -rw-r--r--  1 tomcat tomcat  13K Apr 14 20:46 catalina.2020-04-14.log.gz  -rw-r--r--  1 tomcat tomcat 7.1K Apr 16 17:51 catalina.2020-04-16.log.gz  -rw-r--r--  1 tomcat tomcat  89G Apr 20 10:39 catalina.out -rw-r--r--  1 tomcat tomcat    0 Feb 10 23:57 catalina.out-20200210  -rw-r--r--  1 tomcat tomcat 352M Apr 13 03:38 catalina.out-20200413

问题虽然解决了,但是这个问题本来就不应该发生啊!难道之前做运维的同事都没有做脚本来监控和限制日志大小嘛?这可是生产系统啊!这样可不行,既然没人搞,我就来搞搞。于是网上搜了一把,原来Linux系统就自带了一个日志切割神器——>logrotate

man了一下logrotate,看到了以下描述:logrotate is designed to ease administration of systems that generate large numbers of log files. It allows automatic rotation, compression, removal, and mailing of log files. Each log file may be handled daily, weekly, monthly, or when it grows too large.

Normally, logrotate is run as a daily cron job. It will not modify a log more than once in one day unless the criterion for that log is based on the log's size and logrotate is being run more than once each day, or unless the -f or --force option is used.

原来这个神器是为了方便管理系统大量日志文件而设计的,对日志文件可实现自动rotation(字面意思是旋转,觉得理解成日志循环更好一些),压缩,删除和通过email发送log文件。颗粒度控制很好,可以针对每一个log文件进行每天,每周,每个月或者当log文件过大时进行rotate。

一般情况下呢,logrotate是基于每天的cron job来执行的,所以对某个log文件的rotae每天执行一次,除非rotate的执行标准是基于log文件大小,并且你logrotate这个命令每天被执行了多次,也就是你自定义了定时任务,让logrotate每x分钟或者每x小时执行一次,再或者你手动执行这个命令添加了-f/--force这个选项。

另外,我发现这个神器是系统自带的,可想而知这个工具是多么的重要,否则Linux也不会默认就安装了这个工具。

那接下来,我们来看看logrotate的相关配置以及如何执行logrotate。

logrotate的conf文件在 /etc/下:

[root@labhost ~]# ll /etc/logrotate.  logrotate.conf  logrotate.d/  [root@labhost ~]# cat /etc/logrotate.conf

那我们来看看logrotate.conf文件里面的内容:

[root@labhost ~]# cat /etc/logrotate.conf  # see "man logrotate" for details  # rotate log files weekly:每周rotate log文件一次  weekly  # keep 4 weeks worth of backlogs:保存最近4周的log日志,因为上面是每周rotate一次  rotate 4  # create new (empty) log files after rotating old ones:rotate老日志文件之后,创建一个新的空日志文件  create  # use date as a suffix of the rotated file:rotate的文件以日期格式为后缀,比如:access_log-20200422,如果不加这个选项,rotate的格式为:access_log.1,access_log.2等等。  dateext  # uncomment this if you want your log files compressed:如果想压缩rotate后的文件,把下面compress前面的#号去掉就可以了。  #compress  # RPM packages drop log rotation information into this directory:RPM包的日志rotation配置信息,建议放到/etc/logrotate.d这个文件夹下,实现自定义控制log文件rotate  include /etc/logrotate.d  # no packages own wtmp and btmp -- we'll rotate them here:wtmp和btmp这两个不属于任何package,我们就把rotate的规则写到这里  /var/log/wtmp {       monthly #每个月执行一次rotate      create 0664 root utmp  #创建空文件,权限是664, 所属用户名 所属用户组          minsize 1M   #日志文件大小超过1M才执行rotate,否则跳过      rotate 1         #rotate时,只保留一份rotate文件  }  /var/log/btmp {      missingok      monthly      create 0600 root utmp      rotate 1  }  # system-specific logs may be also be configured here.#其它系统日志也可以在这里配置rotate规则

关于rotate规则的配置,从上面的logrotate.conf文件里可以看到,有两个地方可以配置:

Linux的logrotate是什么

UncleBen这里准备了一台干净的CentOS7,在安装httpd这个服务之前,我们来看一下/etc/logrotate.d这个文件夹下面都有哪些配置文件

[root@labhost ~]# ll /etc/logrotate.d/  total 20  -rw-r--r--. 1 root root  91 Apr 11  2018 bootlog  -rw-r--r--. 1 root root 224 Oct 30  2018 syslog  -rw-r--r--. 1 root root 100 Oct 31  2018 wpa_supplicant  -rw-r--r--. 1 root root 103 Nov  5  2018 yum  [root@labhost ~]#

我们现在安装一下httpd服务:

[root@labhost ~]# yum install httpd -y  Resolving Dependencies  --> Running transaction check  ---> Package httpd.x86_64 0:2.4.6-90.el7.centos will be installed  --> Finished Dependency Resolution  ......  Install  1 Package  Total download size: 2.7 M  Installed size: 9.4 M  Downloading packages:  httpd-2.4.6-90.el7.centos.x86_64.rpm                  | 2.7 MB  00:00:04  Running transaction check  Running transaction test  Transaction test succeeded  Running transaction    Installing : httpd-2.4.6-90.el7.centos.x86_64       1/1    Verifying  : httpd-2.4.6-90.el7.centos.x86_64       1/1  Installed:    httpd.x86_64 0:2.4.6-90.el7.centos  Complete!  [root@labhost ~]#

再去/etc/logrotate.d这个文件夹下看一下:

[root@labhost ~]# ll /etc/logrotate.d/  total 24  -rw-r--r--. 1 root root  91 Apr 11  2018 bootlog  -rw-r--r--. 1 root root 194 Aug  6  2019 httpd  -rw-r--r--. 1 root root 224 Oct 30  2018 syslog  -rw-r--r--. 1 root root 100 Oct 31  2018 wpa_supplicant  -rw-r--r--. 1 root root 103 Nov  5  2018 yum  [root@labhost ~]#

可以看到,安装httpd之后,自动创建好了针对httpd服务的log rotate配置文件,打开看看:

[root@labhost ~]# cat /etc/logrotate.d/httpd  /var/log/httpd/*log {       missingok       notifempty      sharedscripts      delaycompress      postrotate          /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true      endscript  }  [root@labhost ~]#

这就是一个标准的,针对第三方软件的一个logrotate配置文件,简单说明一下:

格式:

参数解读:

missingok: 如果日志不存在,不产生错误信息

notifempty:如果日志文件为空,不做rotate,这个跟你ifempty互斥

sharedscripts:配合prerotate and postrotate 使用,sharedscripts 开启的话,如果使用了对需要做rotate的log文件使用了

通配符,那么*

prerotate** and postrotate 的脚本只会执行一次。没有sharedscripts 的话,每个需要log文件做rotate的时候都会执行一遍prerotate and postrotate 的脚本

delaycompress:延迟压缩旧的日志文件,先rotate,不进行压缩,等到下次rotate时,才会压缩上次rotate的文件。这个需要跟compress一起使用,单独使用不生效。

postrotate/endscript:rotate之后想要执行的脚本,需要放在postrotate 与 endscript中间,这两个选项要单独成行。

除了上面的参数外,还有以下常见参数:

daily            指定rotate周期为每天,还有weekly, monthly。  rotate count    指定rotate日志文件保留的数量,如果没有配置这个参数,就不保留备份,设置1的话,就是保                    留1个rotate备份,10就是保留10个rotate备份。  size size        当日志文件到达指定的大小时才转储,默认的大小单位是bytes,可以以k,M,G。比如size 10k,                  10M, 10G。  compress        通过gzip压缩然后备份日志。  nocompress      默认值,不做gzip压缩处理。  delaycompress   和compress配合使用,rotate的日志文件到下一次执行logrotate时才进行压缩处理。  copytruncate    把当前日志备份并截断,先拷贝原日志文件再清空,由于拷贝和清空之间有一个时间差,可能会丢失部                 分日志数据。  create mode owner group        rotate之后,创建新文件的日志文件并指定新文件的属性,比如:                              create 644 tomcat tomcat  mail address     把rotate的日志文件发送到指定的E-mail。  dateext          使用当期日期作为命名格式,如果指定的rotate大于1,默认rotate之后的文件名是:xx.log.1,                     xx.log.2, xx.log3,如果配置dateext规则,那么rotate之后的文件名就会以日期结                     尾:xx.log.2020-04-20,xx.log.2020-04-21, xx.log.2020-04-22 dateformat -%Y%m%d%H.%s   定义文件rotate后的文件名的日期格式,必须配合dateext使用,查了一下资料,目前只支持: %Y %m %d %H %s 这几个个参数(年,月,日,时,秒)

rotate的规则是配置好了,但是怎么来执行呢?我们来help一下。

[root@labhost ~]# logrotate --help  Usage: logrotate [OPTION...] <configfile>    -d, --debug               Don't do anything, just test (implies -v)    -f, --force               Force file rotation    -m, --mail=command        Command to send mail (instead of `/bin/mail')    -s, --state=statefile     Path of state file    -v, --verbose             Display messages during rotation    -l, --log=STRING          Log file    --version                 Display version information  Help options:    -?, --help                Show this help message    --usage                   Display brief usage message  [root@labhost ~]#

这里着重说一下-d和-f两个选项:

-d:debug模式,就是先演练一遍,不是真干。

-f:强制模式,实打实的执行。

从上面我们man logrotate的信息可以了解到:一般情况下呢,logrotate是基于每天的cron job来执行的,所以对某个log文件的rotae每天执行一次,除非rotate的执行标准是基于log文件大小,并且你logrotate这个命令每天被执行了多次,也就是你自定义了定时任务,让logrotate每x分钟或者每x小时执行一次,再或者你手动执行这个命令添加了-f/--force这个选项。

为什么是每天执行一次呢?我们去/etc/cron.daily/,/etc/cron.weekly/,/etc/cron.monthly/,/etc/cron.hourly/可以看到,在/etc/cron.daily/这个文件夹下有一个logrotate可执行脚本,那每天就会跑一次啦!

[root@labhost ~]# ll /etc/cron.daily/  total 8  -rwx------. 1 root root 219 Oct 31  2018 logrotate  -rwxr-xr-x. 1 root root 618 Oct 30  2018 man-db.cron  [root@labhost ~]# ll /etc/cron.weekly/  total 0  [root@labhost ~]# ll /etc/cron.monthly/  total 0  [root@labhost ~]# ll /etc/cron.hourly/  total 4  -rwxr-xr-x. 1 root root 392 Apr 11  2018 0anacron  [root@labhost ~]#

那我们来看看logrotate脚本里写的什么内容:

[root@labhost ~]# cat /etc/cron.daily/logrotate  #!/bin/sh  /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf  EXITVALUE=$?  if [ $EXITVALUE != 0 ]; then      /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"  fi  exit 0  [root@labhost ~]#

简单理解就是执行logrotate命令,并且指定执行logrotate时状态文件和执行的conf文件:/etc/logrotate.conf。大家还记不记得在这个文件里,有一行:include /etc/logrotate.d,也就是说在执行logrotate.conf这个文件时,一并执行/etc/logrotate.d文件夹下的配置文件。下面几行就是执行出错时,logger一下。

所以,我们执行logrotate时,可以直接运行:logrotate + confi文件名

[root@labhost ~]# logrotate /etc/logrotate.d/httpd

如果一切顺利,那么logrotate命令会执行成功,httpd的日志文件会被按照你配置的规则进行rotate。但是如果没有达到你的期望结果,你就需要来debug了。其实推荐大家在放到生产环境之前,最好好是用-d选项来测试一下你写的配置文件是否可以达到你的预期。我们来看一下加上-d选项的运行结果:

[root@labhost ~]# logrotate -d /etc/logrotate.d/httpd  reading config file /etc/logrotate.d/httpd  Allocating hash table for state file, size 15360 B  Handling 1 logs  rotating pattern: /var/log/httpd/*log  1048576 bytes (no old logs will be kept)  empty log files are not rotated, old logs are removed  considering log /var/log/httpd/access_log    log does not need rotating (log size is below the 'size' threshold)  considering log /var/log/httpd/error_log    log does not need rotating (log size is below the 'size' threshold)  not running postrotate script, since no logs were rotated  [root@labhost ~]#

现在我们把httpd这个logrotate的流程梳理一下:

对于大多数情况下,每天把日志备份一下已经足够了。但是像UncleBen周一遇到的这种case:一天之内,log日志把磁盘给撑爆了。那这种case,用logrotate该如何解决呢?

首先我们来捋一下需求:

执行周期

logrotate默认是每天,我们的需求是一天之内,所以可以让logrotate每半天(每12小时)、每8个小时、每4个小时、每2个小时,甚至是每小时执行一次,都可以。这个看各位心情。

文件大小

超过多大才执行logrotate,这个也是根据实际环境来确定。UncleBen遇到这个case,日志竟然暴涨到89G,我这里就设置成超过1G大小就进行rotate。

为了能让各位客官老爷们看到真是的效果,我这里做了一点小小的改动,话不多说了,上demo:

httpd logrotate的配置文件更改如下:

version1:在原来基础上增加了一行:rotate 3

[root@labhost ~]# cat /etc/logrotate.d/httpd  /var/log/httpd/*log {      rotate 3      missingok      notifempty      sharedscripts      delaycompress      postrotate          /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true      endscript  }  [root@labhost ~]#

然后我来创建一个cron job,每分钟执行一次:

*/1 * * * * /usr/sbin/logrotate /etc/logrotate.d/httpd

然后创建一个监控httpd文件夹下log文件的脚本:

[root@labhost ~]# cat monitorlog.sh  #!/bin/bash  while :  do      sleep 2      ls -hl /var/log/httpd/  done

我们来执行一下monitorlog.sh,来观察一下httpd的日志文件。注意:我这里是访问了Apache默认的站点,然后手动刷新Apache站点,来产生点access log,然后停止刷新页面。

[root@labhost ~]# ./monitorlog.sh  total 140K  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log  -rw-r--r--. 1 root root 12K Apr 24 14:09 error_log  total 140K  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log  -rw-r--r--. 1 root root 12K Apr 24 14:09 error_log  total 96K  -rw-r--r--. 1 root root   0 Apr 24 14:10 access_log  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log.1  -rw-r--r--. 1 root root 370 Apr 24 14:10 error_log  -rw-r--r--. 1 root root 12K Apr 24 14:10 error_log.1  total 96K  -rw-r--r--. 1 root root   0 Apr 24 14:10 access_log  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log.1  -rw-r--r--. 1 root root 370 Apr 24 14:10 error_log  -rw-r--r--. 1 root root 12K Apr 24 14:10 error_log.1  ...

我们可以看到:

Apr 24 14:13 /var/log/httpd/文件夹下信息:

total 96K  -rw-r--r--. 1 root root   0 Apr 24 14:10 access_log  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log.1  -rw-r--r--. 1 root root 370 Apr 24 14:13 error_log  -rw-r--r--. 1 root root 663 Apr 24 14:13 error_log.1  -rw-r--r--. 1 root root 663 Apr 24 14:12 error_log.2  -rw-r--r--. 1 root root 663 Apr 24 14:11 error_log.3

rotate 3这个参数:

Apr 24 14:14 /var/log/httpd/文件夹下信息:

total 96K  -rw-r--r--. 1 root root   0 Apr 24 14:10 access_log  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log.1  -rw-r--r--. 1 root root 370 Apr 24 14:14 error_log  -rw-r--r--. 1 root root 663 Apr 24 14:14 error_log.1  -rw-r--r--. 1 root root 663 Apr 24 14:13 error_log.2  -rw-r--r--. 1 root root 663 Apr 24 14:12 error_log.3

Apr 24 14:15 /var/log/httpd/文件夹下信息:

total 96K  -rw-r--r--. 1 root root   0 Apr 24 14:10 access_log  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log.1  -rw-r--r--. 1 root root 370 Apr 24 14:15 error_log  -rw-r--r--. 1 root root 663 Apr 24 14:15 error_log.1  -rw-r--r--. 1 root root 663 Apr 24 14:14 error_log.2  -rw-r--r--. 1 root root 663 Apr 24 14:13 error_log.3

delaycompress这个参数:

postrotate/endscript这个参数里的脚本:/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript

就是在log日志被rotate之后,需要重新reload httpd service,如果没有这个脚本会怎么样呢?我们来到/etc/logrotate.d/httpd里,把这3行注释掉。再到monitorlog.sh执行的结果来看看:

total 92K  -rw-r--r--. 1 root root   0 Apr 24 14:10 access_log  -rw-r--r--. 1 root root 79K Apr 24 14:09 access_log.1  -rw-r--r--. 1 root root 370 Apr 24 14:47 error_log.1  -rw-r--r--. 1 root root 663 Apr 24 14:47 error_log.2  -rw-r--r--. 1 root root 663 Apr 24 14:46 error_log.3

注释掉postrotate/endscript脚本后,我们发现:

total 136K  -rw-r--r--. 1 root root  38K Apr 24 14:52 access_log  -rw-r--r--. 1 root root  79K Apr 24 14:09 access_log.1  -rw-r--r--. 1 root root 5.4K Apr 24 14:52 error_log.1  -rw-r--r--. 1 root root  663 Apr 24 14:47 error_log.2  -rw-r--r--. 1 root root  663 Apr 24 14:46 error_log.3
total 136K  -rw-r--r--. 1 root root  38K Apr 24 14:52 access_log.1  -rw-r--r--. 1 root root  79K Apr 24 14:09 access_log.2  -rw-r--r--. 1 root root 5.4K Apr 24 14:52 error_log.1  -rw-r--r--. 1 root root  663 Apr 24 14:47 error_log.2  -rw-r--r--. 1 root root  663 Apr 24 14:46 error_log.3
total 148K  -rw-r--r--. 1 root root  49K Apr 24 15:30 access_log.1  -rw-r--r--. 1 root root  79K Apr 24 14:09 access_log.2  -rw-r--r--. 1 root root 6.9K Apr 24 15:30 error_log.1  -rw-r--r--. 1 root root  663 Apr 24 14:47 error_log.2  -rw-r--r--. 1 root root  663 Apr 24 14:46 error_log.3

记不记得我们还有一个参数叫copytruncate,我们来试试,在没有postrotate/endscript脚本时,加上这个参数是什么效果。

version2:删除postrotate/endscript脚本,增加copytruncate

[root@labhost ~]# cat /etc/logrotate.d/httpd  /var/log/httpd/*log {      rotate 3      missingok      notifempty      sharedscripts      delaycompress      copytruncate  }

我们先stop httpd service,然后删除所有的access_log和error_log, 最后start httpd service,可以看到,httpd的日志文件正常产生了。

[root@labhost ~]# systemctl stop httpd  [root@labhost ~]# rm -rf /var/log/httpd/*  [root@labhost ~]# ll /var/log/httpd/  total 0  [root@labhost ~]#  [root@labhost ~]# systemctl start httpd  [root@labhost ~]# ll /var/log/httpd/  total 4  -rw-r--r--. 1 root root   0 Apr 24 15:47 access_log  -rw-r--r--. 1 root root 812 Apr 24 15:47 error_log  [root@labhost ~]#

接下来我们再刷新一下页面,产生一些access log和error log,等待几分钟,执行mornitorlog.sh来看一下:

total 60K  -rw-r--r--. 1 root root  17K Apr 24 15:51 access_log  -rw-r--r--. 1 root root  27K Apr 24 15:51 access_log.1  -rw-r--r--. 1 root root 2.3K Apr 24 15:51 error_log  -rw-r--r--. 1 root root 3.6K Apr 24 15:51 error_log.1  -rw-r--r--. 1 root root  812 Apr 24 15:48 error_log.2

所以,比起放在postrotate/endscript中间的reload httpd service脚本,我更喜欢用copytruncate这个参数。

version3:在version2的基础上,增加dateext参数

[root@labhost ~]# cat /etc/logrotate.d/httpd  /var/log/httpd/*log {      rotate 3      missingok      notifempty      sharedscripts      delaycompress      copytruncate      dateext  }

我们尝试访问页面,刷新,产生一些access log和error log。等待几分钟,我们执行monitorlog.sh来看一下,可以发现:

total 144K  -rw-r--r--. 1 root root  30K Apr 24 16:55 access_log  -rw-r--r--. 1 root root 9.3K Apr 24 15:56 access_log.1  -rw-r--r--. 1 root root  17K Apr 24 15:52 access_log.2  -rw-r--r--. 1 root root  26K Apr 24 16:07 access_log-20200424  -rw-r--r--. 1 root root  27K Apr 24 15:51 access_log.3  -rw-r--r--. 1 root root 4.1K Apr 24 16:55 error_log  -rw-r--r--. 1 root root 1.3K Apr 24 15:56 error_log.1  -rw-r--r--. 1 root root 2.3K Apr 24 15:52 error_log.2  -rw-r--r--. 1 root root 3.6K Apr 24 16:07 error_log-20200424  -rw-r--r--. 1 root root 3.6K Apr 24 15:51 error_log.3

version4:在version3的基础上,增加dateformat -%Y%m%d%H.%s参数

[root@labhost ~]# cat /etc/logrotate.d/httpd  /var/log/httpd/*log {      rotate 3      missingok      notifempty      sharedscripts      delaycompress      copytruncate      dateext      dateformat -%Y%m%d%H.%s  }

我们再次尝试访问页面,刷新,产生一些access log和error log。等待几分钟,我们执行monitorlog.sh来看一下,可以发现:

total 172K  -rw-r--r--. 1 root root 7.5K Apr 24 17:41 access_log  -rw-r--r--. 1 root root  26K Apr 24 16:07 access_log-20200424  -rw-r--r--. 1 root root  25K Apr 24 17:32 access_log-2020042417.1587720721  -rw-r--r--. 1 root root  14K Apr 24 17:39 access_log-2020042417.1587721141  -rw-r--r--. 1 root root 3.8K Apr 24 17:40 access_log-2020042417.1587721201  -rw-r--r--. 1 root root 1.1K Apr 24 17:41 error_log  -rw-r--r--. 1 root root 3.6K Apr 24 16:07 error_log-20200424 -rw-r--r--. 1 root root 3.3K Apr 24 17:32 error_log-2020042417.1587720721  -rw-r--r--. 1 root root 1.8K Apr 24 17:39 error_log-2020042417.1587721141  -rw-r--r--. 1 root root  514 Apr 24 17:40 error_log-2020042417.1587721201

给大家留个问题:如果dateformat定义的格式是:-%Y%m%d%H,那么在日志文件非空并且持续更新的情况下,access_log和error_log会多久被rotate一次?

version5:在version4的基础上,增加size 50K参数

[root@labhost ~]# cat /etc/logrotate.d/httpd  /var/log/httpd/*log {      size 50K      rotate 3      missingok      notifempty      sharedscripts      delaycompress      copytruncate      dateext      dateformat -%Y%m%d%H.%s  }

这一次,我们先执行monitorlog.sh来看一下access_log和error_log的大小,再尝试访问页面,刷新,产生一些access log和error log,注意一下,因为我配置的size大小是50K,所以让access_log文件大小<50K,然后等待几分钟,观察monitorlog.sh输出,可以发现:

total 132K  -rw-r--r--. 1 root root  49K Apr 24 18:04 access_log  -rw-r--r--. 1 root root  26K Apr 24 16:07 access_log-20200424  -rw-r--r--. 1 root root 1.9K Apr 24 17:56 access_log-2020042417.1587722161  -rw-r--r--. 1 root root 3.8K Apr 24 17:58 access_log-2020042417.1587722281  -rw-r--r--. 1 root root 7.5K Apr 24 17:59 access_log-2020042417.1587722341  -rw-r--r--. 1 root root 6.6K Apr 24 18:04 error_log  -rw-r--r--. 1 root root 3.6K Apr 24 16:07 error_log-20200424  -rw-r--r--. 1 root root  257 Apr 24 17:56 error_log-2020042417.1587722161  -rw-r--r--. 1 root root  514 Apr 24 17:58 error_log-2020042417.1587722281  -rw-r--r--. 1 root root 1.1K Apr 24 17:59 error_log-2020042417.1587722341
total 132K  -rw-r--r--. 1 root root  52K Apr 24 18:11 access_log  -rw-r--r--. 1 root root  26K Apr 24 16:07 access_log-20200424  -rw-r--r--. 1 root root 1.9K Apr 24 17:56 access_log-2020042417.1587722161  -rw-r--r--. 1 root root 3.8K Apr 24 17:58 access_log-2020042417.1587722281  -rw-r--r--. 1 root root 7.5K Apr 24 17:59 access_log-2020042417.1587722341  -rw-r--r--. 1 root root 7.1K Apr 24 18:11 error_log -rw-r--r--. 1 root root 3.6K Apr 24 16:07 error_log-20200424  -rw-r--r--. 1 root root  257 Apr 24 17:56 error_log-2020042417.1587722161  -rw-r--r--. 1 root root  514 Apr 24 17:58 error_log-2020042417.1587722281  -rw-r--r--. 1 root root 1.1K Apr 24 17:59 error_log-2020042417.1587722341  total 128K  -rw-r--r--. 1 root root    0 Apr 24 18:12 access_log  -rw-r--r--. 1 root root  26K Apr 24 16:07 access_log-20200424  -rw-r--r--. 1 root root 3.8K Apr 24 17:58 access_log-2020042417.1587722281  -rw-r--r--. 1 root root 7.5K Apr 24 17:59 access_log-2020042417.1587722341  -rw-r--r--. 1 root root  52K Apr 24 18:12 access_log-2020042418.1587723121  -rw-r--r--. 1 root root 7.1K Apr 24 18:11 error_log  -rw-r--r--. 1 root root 3.6K Apr 24 16:07 error_log-20200424  -rw-r--r--. 1 root root  257 Apr 24 17:56 error_log-2020042417.1587722161  -rw-r--r--. 1 root root  514 Apr 24 17:58 error_log-2020042417.1587722281  -rw-r--r--. 1 root root 1.1K Apr 24 17:59 error_log-2020042417.1587722341

version6:在version5的基础上,增加compress参数

[root@labhost ~]# cat /etc/logrotate.d/httpd  /var/log/httpd/*log {      compress      size 50K      rotate 3      missingok      notifempty      sharedscripts      delaycompress      copytruncate      dateext      dateformat -%Y%m%d%H.%s  }

我们继续刷新页面,让access_log大小>50K,观察monitorlog.sh输出,可以发现:

total 168K  -rw-r--r--. 1 root root    0 Apr 24 18:20 access_log  -rw-r--r--. 1 root root  26K Apr 24 16:07 access_log-20200424  -rw-r--r--. 1 root root  398 Apr 24 17:59 access_log-2020042417.1587722341.gz  -rw-r--r--. 1 root root 1.3K Apr 24 18:12 access_log-2020042418.1587723121.gz  -rw-r--r--. 1 root root  84K Apr 24 18:20 access_log-2020042418.1587723601  -rw-r--r--. 1 root root  19K Apr 24 18:19 error_log  -rw-r--r--. 1 root root 3.6K Apr 24 16:07 error_log-20200424  -rw-r--r--. 1 root root  257 Apr 24 17:56 error_log-2020042417.1587722161  -rw-r--r--. 1 root root  514 Apr 24 17:58 error_log-2020042417.1587722281  -rw-r--r--. 1 root root 1.1K Apr 24 17:59 error_log-2020042417.1587722341

感谢各位的阅读,以上就是“Linux的logrotate是什么”的内容了,经过本文的学习后,相信大家对Linux的logrotate是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 日志切割logrotate的介绍
  2. logrotate的日志轮转

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux logrotate

上一篇:MySQL出现 Access denied for user ‘root’@'localhost’ using password: YES错误该怎么办

下一篇:Hibernate自动生成工具Schema怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》