我正在使用:
Linux workdesk 3.16.0-31-generic #43~14.04.1-Ubuntu SMP Tue Mar 10 20:13:38 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
分销商 ID:Ubuntu
描述:Ubuntu 14.04.2 LTS
发行版:14.04
代号:trusty
logrotate 3.8.7-1ubuntu1 amd64
我正在尝试测试 logrotate 的行为。
我的配置文件是:
/home/user/test/*.log {
daily
rotate 2
ifempty
su user user
}
ls /home/user/test/*.log
输出
/home/user/test/1.log
sudo logrotate -fv /etc/logrotate.d/r
输出
reading config file /etc/logrotate.d/r
Handling 1 logs
rotating pattern: /home/user/test/*.log forced from command line (2 rotations)
empty log files are rotated, old logs are removed
switching euid to 1000 and egid to 1000
considering log /home/user/test/1.log
log needs rotating
rotating log /home/user/test/1.log, log->rotateCount is 2
dateext suffix '-20150327'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /home/user/test/1.log.2 to /home/user/test/1.log.3 (rotatecount 2, logstart 1, i 2),
old log /home/user/test/1.log.2 does not exist
renaming /home/user/test/1.log.1 to /home/user/test/1.log.2 (rotatecount 2, logstart 1, i 1),
old log /home/user/test/1.log.1 does not exist
renaming /home/user/test/1.log.0 to /home/user/test/1.log.1 (rotatecount 2, logstart 1, i 0),
old log /home/user/test/1.log.0 does not exist
log /home/user/test/1.log.3 doesn't exist -- won't try to dispose of it
renaming /home/user/test/1.log to /home/user/test/1.log.1
switching euid to 0 and egid to 0
和ls
输出之后
1.log.1
就这样
有人能解释一下进程的轮换吗?
1) 什么是“将 /home/user/test/1.log.0 重命名为 /home/user/test/1.log.1”?如果我有轮换计数 = 0
2) 1.log 文件在哪里?
3) 1.log.0 在哪里?据我了解,我应该只得到 1.log 空文件,仅此而已
答案1
您的配置文件要求每天轮换文件*.log
,/home/user/test
即使文件为空,并保留两个旧文件。
日志旋转执行此操作(正如您在详细输出中看到的那样):
- 更改用户和组(由于
su user user
) - 如果存在则重命名旧日志,从
1.log.2
(由于rotate 2
)开始 - 如果存在则删除
1.log.3
(由于rotate 2
) - 重命名
1.log
当前1.log.1
- 切换回用户和组
因此,正如预期的那样,最后你发现1.log.1
它应该被1.log
重命名。
如果旧日志文件不存在(前几天还没有创建),重命名过程会打印错误,但是 logrotate 不会失败。
如果应用程序正在写入1.log
,则在日志轮换后,它仍会写入,1.log.1
因为重命名文件不会更改文件的 inode。在这种情况下,您应该强制应用程序关闭当前日志文件并使用其优雅重启重新打开它。
这是一个有用的关联如何去做。
我无法解释为什么 logrotate 尝试重命名1.log.0
,这似乎是一个不会导致任何错误的实现错误。