Logrotate重复文件

时间:2019-02-19 14:11:07

标签: linux centos centos7 logrotate

我有一个测试应用程序,它每小时运行一次,并在每次执行时使用唯一的日志文件。要清除日志,已设置以下logrotate配置:

{
        # Daily rotation with 1 week of backlog
        daily
        rotate 7
        maxage 7
        dateext
        compress
}

第一天日志文件被压缩(可以),但是留下一个空文件,并且每隔一天将文件“清空”并压缩。这样,每个日志文件将生成6个文件,这些文件将填充FS的inode表。这是两个示例:

-rw-r--r-- 1 root root 1752 Feb 11 01:36 J20190211013601_Status.txt-20190212.gz
-rw------- 1 root root   20 Feb 12 03:33 J20190211013601_Status.txt-20190213.gz
-rw------- 1 root root   20 Feb 13 03:37 J20190211013601_Status.txt-20190214.gz
-rw------- 1 root root   20 Feb 14 03:10 J20190211013601_Status.txt-20190215.gz
-rw------- 1 root root   20 Feb 15 03:12 J20190211013601_Status.txt-20190216.gz
-rw------- 1 root root   20 Feb 16 03:36 J20190211013601_Status.txt-20190217.gz
-rw------- 1 root root   20 Feb 17 03:44 J20190211013601_Status.txt-20190218.gz
-rw------- 1 root root    0 Feb 18 03:24 J20190211013601_Status.txt

-rw-r--r-- 1 root root 1752 Feb 11 02:36 J20190211023601_Status.txt-20190212.gz
-rw------- 1 root root   20 Feb 12 03:33 J20190211023601_Status.txt-20190213.gz
-rw------- 1 root root   20 Feb 13 03:37 J20190211023601_Status.txt-20190214.gz
-rw------- 1 root root   20 Feb 14 03:10 J20190211023601_Status.txt-20190215.gz
-rw------- 1 root root   20 Feb 15 03:12 J20190211023601_Status.txt-20190216.gz
-rw------- 1 root root   20 Feb 16 03:36 J20190211023601_Status.txt-20190217.gz
-rw------- 1 root root   20 Feb 17 03:44 J20190211023601_Status.txt-20190218.gz
-rw------- 1 root root    0 Feb 18 03:24 J20190211023601_Status.txt

如何解决此问题,以便在压缩后删除文件

感谢您的时间和帮助,

1 个答案:

答案 0 :(得分:0)

这应该是logrotate起作用的方式;您的问题源于每次应用程序运行时都使用唯一文件名的事实。

当logrotate首次在每个日志上运行时,它将日志文件从“ J20190211023601_Status.txt”移动到“ J20190211023601_Status.txt-20190212.gz”,然后创建一个名为J201902110236011_Status.txt的新文件。 strong>。

Logrotate没有内在的想法,即那些文件名是唯一的,因此将不再填充。它所看到的只是过去旋转过的日志,因此必须根据您的配置再次旋转。

您最简单的解决方案是为此日志传递传递 nocreate 指令;这样可以防止创建新日志文件并随后进行轮换,同时仍然遵守先前轮换文件的7天期限:

{
  daily
  maxage 7
  dateext
  compress
  nocreate      
}