每周轮换日志,并在日志名称中添加星期号

问题描述 投票:0回答:1

我正在设置logrotate,并希望每周(最好在星期一)轮换一些日志,并且将其名称更改为example-%year%.w%weeknumber%,其中%weeknumber%是给定年份中的星期数。

使用我的配置的logrotate将每天通过向logrotate.cron添加类似于/etc/cron.daily/的文件来运行。我的logrotate配置看起来像这样:

rotate 12
dateext
nocompress

/var/logs/example* {
    weekly
    dateformat .%Y-w%W
}

配置中的%W基于strftime格式。但是,运行测试logrotate -df /etc/logrotate.d/myconf.conf会产生以下输出:

(...)
considering log /var/logs/example
Creating new state
  Now: 2020-04-23 00:18
  Last rotated at 2020-04-23 00:00
  log needs rotating
rotating log /var/logs/example, log->rotateCount is 12
Converted ' .%Y-w%W' -> '.%Y-w%%W'
dateext suffix '.2020-w%W'
glob pattern '.[0-9][0-9][0-9][0-9]-w%W'
glob finding old rotated logs failed
renaming /var/logs/example to /var/logs/example.2020-w%W
(...)

这意味着,我会从字面上代替%W,而不是星期几。当放置%U而不是%W时,也会发生相同的情况。

我正在使用logrotate 3.11.0,因为它是我要设置它的机器上通过zypper提供的最新版本。

重命名日志文件时如何使logrotate使用实际的星期数?

linux shell logging logrotate
1个回答
0
投票

使用%V代替%U%W帮了我大忙。

rotate 12
dateext
nocompress

/var/logs/example* {
    weekly
    dateformat .%Y-w%V
}

根据strftime的手册页:

%V当前年份的ISO 8601周号(请参阅注释),为十进制数,范围为01至53,其中第1周是新年中至少有4天的第一周。另请参见%U和%W。 (根据tm_year,tm_yday和tm_wday计算。)

而且,根据man entry for 3.11.0(在问这个问题之前我还是有所遗漏):

仅允许%Y%m%d%H%M%S%V和%s指定符。

%V本身已在3.9.0中添加。

尽管此问题涉及较旧的logrotate版本,但请尽可能使用最新版本。

© www.soinside.com 2019 - 2024. All rights reserved.