我有一个测试应用程序,它每小时运行一次,并在每次执行时使用唯一的日志文件。要清除日志,已设置以下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我如何纠正这个问题,以便在压缩后删除文件
感谢你的时间和帮助,
发布于 2019-06-07 04:13:57
这就是logrotate的工作原理;您的问题源于您每次运行应用程序时都使用唯一的文件名的事实。
当logrotate在每个日志上第一次运行时,它会将日志文件从"J20190211023601_Status.txt“移动到"J20190211023601_Status.txt-20190212.gz”,然后创建一个名为J20190211023601_Status.txt的新文件。
Logrotate没有固有的概念,即这些文件名是唯一的,因此永远不会再填充;它看到的只是过去轮换过的日志,因此必须根据您的配置再次轮换。
这里最简单的解决方案是为该日志记录传递nocreate指令;这将阻止创建新的日志文件并随后进行轮换,同时仍然遵守以前轮换的文件的7天期限限制:
{
daily
maxage 7
dateext
compress
nocreate
}https://stackoverflow.com/questions/54768250
复制相似问题