logrotate 似乎工作不正确

logrotate 似乎工作不正确

我正在使用:
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,这似乎是一个不会导致任何错误的实现错误。

相关内容