logrotate不压缩/ var / log / messages


11

随着时间的推移,我注意到一些日志/var/log,例如authkern并且messages变得越来越大。我logrotate为他们输入了:

$ cat /etc/logrotate.d/auth.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/kern.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/messages 
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

我也compress启用了该选项:

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

这个伟大工程auth.logkern.log和其他人,这意味着每个这些日志被gzip压缩和旋转,用日志的最近5天保留。/var/log/messages但是压缩,因此导致超过5天的日志记录:

$ ls /var/log/messages*
/var/log/messages           /var/log/messages-20100213
/var/log/messages-20100201  /var/log/messages-20100214
/var/log/messages-20100202  /var/log/messages-20100215
/var/log/messages-20100203  /var/log/messages-20100216
/var/log/messages-20100204  /var/log/messages-20100217
/var/log/messages-20100205  /var/log/messages-20100218
/var/log/messages-20100206  /var/log/messages-20100219
/var/log/messages-20100207  /var/log/messages-20100220
/var/log/messages-20100208  /var/log/messages-20100221
/var/log/messages-20100209  /var/log/messages-20100222
/var/log/messages-20100210  /var/log/messages-20100223
/var/log/messages-20100211  /var/log/messages-20100224
/var/log/messages-20100212

正如有关ServerFault的另一个logrotate问题所解释的那样,(很可能)不会删除旧日志,因为每个文件的文件结尾都不同。这似乎是因为文件没有被压缩。

/var/log/messages像其他所有日志文件一样,如何在保留最近5天日志的情况下进行压缩和旋转?我想念什么?

编辑1:根据前几个答案的要求提供其他信息。

我正在运行Gentoo Linux。我的/etc/logrotate.conf档案:

$ cat /etc/logrotate.conf 
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d 包含上述我的自定义配置文件以及这些软件包安装的mysql,rsync等配置。

我的根crontab是空的:

$ sudo crontab -l
no crontab for root

我检查了所有/etc/cron.{daily,hourly,monthly,weekly}与syslog相关的内容,并且有一个脚本旋转/var/log/syslog/var/log/auth.log

接下来,我做了一个/var/log/messages-only logrotate配置文件由CarpeNoctem的建议:

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

然后我logrotate手动运行:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
        /bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

根据上面logrotate的日志,使用/ bin / gzip压缩了日志,但是在中没有看到压缩的消息文件/var/log。此外,遍历旧的旋转文件失败。

编辑2:将后缀logrotate添加.gz到旧/var/log/message-*文件后,添加运行的调试输出。

我们首先开始:

$ ls /var/log/messages*
/var/log/messages              /var/log/messages-20100222.gz
/var/log/messages-20100219.gz  /var/log/messages-20100223.gz
/var/log/messages-20100220.gz  /var/log/messages-20100224.gz
/var/log/messages-20100221.gz

然后logrotate使用我们的自定义配置文件运行:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation

这次,logrotate的glob成功并找到了第六个压缩日志文件,打算删除它。该文件实际上并未删除;我猜那是因为我们在调试模式下运行。

我很好奇是否启用delaycompress选项/var/log/messages会有所帮助。我启用了它,并将在第二天早上检查结果。


您可以发布您的logrotate.conf吗?到目前为止,您共享的摘录中没有任何内容可以解释这些消息文件上的日期后缀。Logrotate以前不支持旋转日志文件上的日期后缀。这使我相信,其他完全是在创建这些文件。检查/ etc / crontab,root的crontab和/etc/cron.daily,以查看是否有另一个脚本尝试执行相同的工作。
jmtd

除此之外,您能告诉我们您正在运行哪种Linux版本吗?Debian / Ubuntu有自己的日志轮换脚本,可能会破坏您的logrotate东西。
thepocketwade 2010年

谢谢回复。我正在运行Gentoo Linux。我的crontabs没有对/ var / log / messages进行任何管理。请查看我的问题中的新信息以获取详细信息。
Mike Mazur'2

Answers:


8

添加delaycompress到配置部分以/var/log/messages解决该问题。

来自man logrotate

   delaycompress
          Postpone  compression of the previous log file to the next rota‐
          tion cycle.  This only has effect when used in combination  with
          compress.   It  can  be used when some program cannot be told to
          close its logfile and thus might continue writing to the  previ‐
          ous log file for some time.

我想sysklogd我的syslog守护程序不能被告知关闭其日志文件,因此这是必要的。

有趣的是,我原来的配置(不带delaycompress指令)直接出来了man logrotate(除了我更改weeklydaily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

据说未知未知选项'delalycompress'#logrotate -v /etc/logrotate.d/apc_rtbinfo.conf读取配置文件/etc/logrotate.d/apc_rtbinfo.conf读取/mnt/log/frengo/apc_rtbinfo.log的配置信息错误:/etc/logrotate.d/apc_rtbinfo.conf:7未知选项'delalycompress'-忽略行处理1日志
Ashish

#cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {每日missingok notifempty大小2000M压缩delalycompress共享脚本copytruncate旋转3}
Ashish

1
确定得到的错误是“ delalycompress”中有错别字
Ashish

但现在的问题是log.1大于2000M#du -sh /mnt/log/frengo/apc_rtbinfo.log* 0 /mnt/log/frengo/apc_rtbinfo.log 4.7G /mnt/log/frengo/apc_rtbinfo.log .1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151222 679M /mnt/log/frengo/apc_rtbinfo.log-20151225.gz 681M / mnt / log / frengo /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-20151228 70M /mnt/log/frengo/apc_rtbinfo.log.2。 gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish

5

仅凭此信息很难说,但我可以告诉您,有几次让我省了下来。

Logrotate具有调试选项,该选项将逐步输出到stdout的每个步骤。因此,在这种情况下,您可以执行以下操作:

logrotate -d /etc/logrotate.conf

输出将告诉您到底发生了什么。另外,如果您想缩小调试输出范围,则可以执行

logrotate -d /etc/logrotate.d/messages

虽然您可能希望将main logrotate.conf选项临时放置在该文件块中,因为直接指定文件意味着它永远不会读取main configs选项。指定单个文件还意味着您可以将-f(force)选项与debug选项结合使用,以查看消息文件实际发生的旋转情况。


我尝试按照您的建议手动运行logrotate,它告诉我它正在压缩日志,但我在任何地方都找不到任何压缩日志。有关详细信息,请参见上面的问题。
Mike Mazur'2

1
重命名5个最旧的消息文件,以便它们以.gz结尾,并查看logrotate是否删除了最旧的消息文件。如果是这样,那么我们知道由于gzip无法正确运行而导致通配失败。这至少将确认缺乏压缩是缺乏旋转的原因。
CarpeNoctem

完成,详细信息添加到上面的问题。我很好奇实时/var/log/messages文件是否存在争用问题,该delaycompress选项会有所帮助。
Mike Mazur'2

我发现了另一个有趣的观点。启用-d选项时,logrotate命令不会触摸日志文件。查看手册以获取更多信息。-d, --debug Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
CBR

1

考虑在您的logrotate.conf中尝试此设置:

dateformat .%Y%m%d

并重命名现有的邮件文件以使用点而不是破折号。然后,再次尝试您的logrotate。

下面的线索使我相信,如果将破折号以某种方式解释为一种选择,那么破折号可能会导致其失败(其中-将解决此问题)。这没有任何意义,但可能是可能的。

dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed

我认为这不是根本原因。当前日期格式(带破折号)对于其他日志文件而言效果很好。这些日志文件之间的区别在于/var/log/messages,旋转/var/log/messages文件没有压缩。
Mike Mazur 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.