Ubuntu 14.04 为 Tomcat 7 提供了日志轮换功能,并假定日志文件按天命名,因此它会搜索这些文件,并压缩和删除现有的文件。根据日志文件是否存在以及日志文件的更改频率,这可能会与我自己的由 Tomcat 7 托管的 Web 应用程序使用的每月命名方案发生冲突:
/etc/cron.daily/tomcat7
:
gzip: /var/log/tomcat7/…/RebootDevice/2017-05.log.gz already exists; not overwritten
我可以忍受每隔几天或几周发送一次这些消息,因为默认情况下日志消息仅包含错误,而这些错误不应该出现得太频繁。我不明白的是为什么我第二天就收到此消息。Ubuntu 执行以下操作:
find /var/log/$NAME/ -name \*.$LOGEXT -daystart -mtime +0 -print0
我已经在我的实际目录中进行了测试,结果如下:
root@…:/var/log/tomcat7/…/RebootDevice# ls -lisa
[…]
1089049 0 -rw-r--r-- 1 tomcat7 tomcat7 0 Mai 29 09:09 2017-05.log
1089047 4 -rw-r--r-- 1 tomcat7 adm 402 Mai 26 10:22 2017-05.log.gz
root@…:/var/log/tomcat7/…/RebootDevice# find . -name \*.log -daystart -mtime -0
root@…:/var/log/tomcat7/…/RebootDevice# find . -name \*.log -daystart -mtime +0
./2017-05.log
正如您所看到的,使用调用+0
可以找到我的文件,即使它是两天前最后一次写入的,而使用-0
却找不到。-mtime
定义为n*24
小时,所以+/-0
应该没有任何区别,根据我的理解-daystart
,测试只锚定在整天的开始,应该是00:00
。
那么,为什么在这种情况下-0
vs. 的+0
行为会有所不同?这似乎造成了几个小时的差异1*24
。
答案1
从man find
:
-mtime n
文件数据最后一次修改是n*24
在几个小时前。[…]
无论你是否使用-daystart
,不管舍入如何工作,对于特定的find
调用,所有文件都可以分成几个不相交的集合不知何故:
- 答:文件修改于 0 天前,
- B:1天前修改的文件,
- C:2天前修改过的文件,
- D:3天前修改过的文件,
- …
该手册还指出:
数字参数可以指定为
+n
表示大于n
,
-n
表示小于n
,
n
表示恰好n
。
正如您所看到的,这里的减号不是(数学)负一的因数。相反:
-mtime -0
不匹配任何内容;
-mtime 0
匹配集合 A;
-mtime +0
匹配 B、C、D、…。
-mtime -1
与集合 A 匹配;
-mtime 1
与集合 B 匹配;
-mtime +1
与集合 C、D、… 匹配。
-mtime -2
匹配 A 和 B(相当于! -mtime +1
);
等等。