语境
我需要使用一个设计不佳的 java 应用程序,该应用程序在运行时会记录大量信息。在标准使用情况下,它将每小时创建 100 MB 的日志。
我不需要历史日志,目前看来 logrotate 实用程序无法跟上它,因为它运行得不够频繁。该应用程序是闭源的,其日志大小约为 36MB。
我的 Linux 发行版是 RHEL7。
问题
我想通过压缩和旋转日志来减少浪费的空间。
- 由于应用程序已经将日志拆分为新文件,是否可以自动压缩目录中新创建的文件?
- 是否可以自动删除assessor-cli.X.log 格式的所有文件,其中X 是大于...比如5 的数字(即仅保留5 个最新日志)。
这是我对 logrotate 文件的尝试:
# cat /etc/logrotate.d/cis_assessor
/usr/share/foreman-proxy/Ansible/CIS/audit/Assessor-CLI-4.0.2/logs/assessor-cli.log {
missingok
notifempty
compress
rotate 5
size 30M
此 logrotate 作业需要捕获大小在 30MB 到 36MB 之间的日志才能真正生效,这可能只需要 10 秒的时间。这就是为什么我要询问在没有 logrotate 的情况下压缩和删除文件的手动路径。
答案1
由于应用程序已经将日志拆分为新文件,是否可以自动压缩目录中新创建的文件?
是的。只需使用可以监视目录中新文件的东西来定位新创建的文件(喜欢entr
)
所以你将创建一个像这样的 logrotate 配置 ( /etc/logrotate.d/newlogrotateconf
)
/usr/share/foreman-proxy/Ansible/CIS/audit/Assessor-CLI-4.0.2/logs/assessor-cli.log {
missingok
notifempty
compress
rotate 5
}
然后您将entr
在目录上循环运行以绑定logrotate
到inotify
/ epoll
,
echo -n /usr/share/foreman-proxy/Ansible/CIS/audit/Assessor-CLI-4.0.2/logs/
| ./entr -dnc logrotate --force /etc/logrotate.d/newlogrotateconf