我正在设置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
使用实际的星期数?
使用%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版本,但请尽可能使用最新版本。