语境
我需要使用设计不佳的 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 的情况下压缩和删除文件的手动路径。
是的。只需使用可以监视目录中新文件的东西来定位新创建的文件(例如
entr
)所以你会像这样创建一个 logrotate 配置 (
/etc/logrotate.d/newlogrotateconf
)然后你将在目录上循环运行以
entr
绑定/ ,logrotate
inotify
epoll