记录文件名中包含日期的文件

Nom*_*mir 31 tomcat redhat date logrotate

我正在尝试在RHEL中为tomcat6日志配置logrotate.目前,logrotate适用于catalina.out日志,它可以正确旋转和压缩.

问题在于包含日期的文件如:

catalina.2012-01-20.log
catalina.2012-01-21.log
catalina.2012-01-22.log
Run Code Online (Sandbox Code Playgroud)

这些文件没有被轮换.我知道我必须在/etc/logrotate.d/tomcat6文件中配置这些文件,其中配置了catalina.out的旋转.但我无法配置它.

我想要的是每天压缩这些旧文件,除了当前日期日志文件.

请有人帮我解决这个问题!

谢谢Noman A.

nor*_*ley 39

(如果它看起来像一个醉酒的蜘蛛已经格式化了那么第一篇帖子那么抱歉)

在使用我们的朋友Google之后,我在这里和我无法记住我在哪里使用logrotate(而不是cron或其他等价物)来实现某些目标.

我在/ var/log/rsync /中有以下内容:

-rw-r--r-- 1 root root 1.1M Apr  9 08:13 2014-04-09 07:48:18.log
-rw-r--r-- 1 root root 1.4M Apr 11 15:20 2014-04-11 15:02:52.log
-rw-r--r-- 1 root root 1.6M Apr 11 15:42 2014-04-11 15:22:04.log
-rw-r--r-- 1 root root 1.8M Apr 12 08:01 2014-04-12 07:45:31.log
-rw-r--r-- 1 root root 2.0M Apr 13 08:10 2014-04-13 07:53:38.log
-rw-r--r-- 1 root root 2.2M Apr 14 08:19 2014-04-14 07:51:09.log
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log
Run Code Online (Sandbox Code Playgroud)

和以下logrotate文件:

/var/log/rsync/*.log {
       daily
       rotate 7
       compress
       delaycompress
       notifempty
       missingok
}
Run Code Online (Sandbox Code Playgroud)

我认为这是完全合理的.但是在它拒绝工作并且发现它永远不会起作用之后(由于这篇文章提供),我想知道它是否可能被捏造以使其发挥作用.

经过大量测试和调整后,我设法通过以下方式捏造它:

/var/log/rsync/dummy {
        daily
        rotate 0
        create
        ifempty
        lastaction
                /usr/bin/find /var/log/rsync/ -mtime +7 -delete
                /usr/bin/find /var/log/rsync/ -mtime +1 -exec gzip -q {} \;
        endscript
}
Run Code Online (Sandbox Code Playgroud)

到名为/etc/logrotate.d/local-rsync的logrotate配置文件中.然后创建虚拟日志文件:

touch /var/log/rsync/dummy
Run Code Online (Sandbox Code Playgroud)

然后强制一个logrotate:

logrotate -fv /etc/logrotate.d/local-rsync
Run Code Online (Sandbox Code Playgroud)

这使:

-rw-r--r-- 1 root root  71K Apr  9 08:13 2014-04-09 07:48:18.log.gz
-rw-r--r-- 1 root root  88K Apr 11 15:20 2014-04-11 15:02:52.log.gz
-rw-r--r-- 1 root root  82K Apr 11 15:42 2014-04-11 15:22:04.log.gz
-rw-r--r-- 1 root root  84K Apr 12 08:01 2014-04-12 07:45:31.log.gz
-rw-r--r-- 1 root root  87K Apr 13 08:10 2014-04-13 07:53:38.log.gz
-rw-r--r-- 1 root root  92K Apr 14 08:19 2014-04-14 07:51:09.log.gz
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log
-rw-r--r-- 1 root root    0 Apr 16 12:11 dummy
Run Code Online (Sandbox Code Playgroud)

现在等到明天早上......

我意识到cron会更整洁,但是我在logrotate配置文件中有另一个元素,并希望将两者保持在一起.

与虚拟文件的奖励是它不占用任何空间!

您可能会发现它似乎有一天没有旋转任何东西.我花了很长时间才解决了原因,但后来却蠢蠢欲动.find -mtime +1是整天(即24*60分钟),如果每日logrotate在上次创建日志的时间/时间后不到24小时内启动,那么它有时似乎没有工作.如果它困扰你,那么使用23小时查找-mmin +1380可能更合适.

  • 使用`lastaction / endscript`选项,您救了我!谢谢 (2认同)

nel*_*aro 11

我花了很长时间阅读大量文档.Logrotate似乎无法使用文件名中包含的日期对不同的文件进行分组.Logrotate不能做我们需要它做的事情.

您有两个选项可以将java/tomcat提供的日志记录工具更改为不包含文件名中的日期. http://tomcat.apache.org/tomcat-6.0-doc/logging.html

第二种也是更快捷的方法是使用您自己的小脚本为您完成工作find.https://serverfault.com/questions/256218/logrotation-when-filenames-includes-date, https://serverfault.com/a/256231/71120

find/pathtologs/*-mtime +5 -exec rm {} \;

我选择了第二个选项,因为我们的开发人员已经在文件名中编写了日期.所以它需要保持这种状态.这些-mtime +5集合只能查找超过5天的文件.

来自find的文档.

文件的数据最后修改时间为n*24小时前.请参阅-atime的注释,以了解舍入如何影响文件修改时间的解释.

根据评论更新

find/pathtologs/*-mtime +5 -delete

如果您特别想删除,这是一种快速的方法.如果您需要其他命令,您可以随时替换其他命令exec rm {} \;.

  • 而不是做`-exec rm {} \;`,你也可以在`find`的许多版本中简单地做`-delete`.我认为它更清楚. (6认同)
  • @LászlóvandenHoek确保你做同样的事情.`-delete`不是`rm`.`-delete`暗示`-depth`.与`rm`不同,如果目录为空(或被命令清空),它将删除目录.我同意,`-delete`很好.不知道它存在.谢谢. (2认同)

小智 6

/etc/cron.d/rotate_tomcat_logs中的内容如下:

# delete every log file over 100 days old, and compress every log file over 1 day old.
00 1 * * * root ( find /opt/tomcat/logs -name \*log\* -name \*.gz -mtime +100 -exec rm -f {} \; >/dev/null 2>&1 )
05 1 * * * root ( find /opt/tomcat/logs -name \*log\* ! -name \*.gz -mtime +1 -exec gzip {} \; >/dev/null 2>&1 )
Run Code Online (Sandbox Code Playgroud)


Pau*_*ong 0

在日志轮换文件中,使用rotate #,其中 # 是在删除日志之前要保留的日志数。

旋转计数

日志文件在被删除或邮寄到邮件指令中指定的地址之前会轮换多次。如果计数为 0,则旧版本将被删除而不是轮换。