是否可以自动将新创建的文件压缩到目录中

是否可以自动将新创建的文件压缩到目录中

语境

我需要使用一个设计不佳的 java 应用程序,该应用程序在运行时会记录大量信息。在标准使用情况下,它将每小时创建 100 MB 的日志。

我不需要历史日志,目前看来 logrotate 实用程序无法跟上它,因为它运行得不够频繁。该应用程序是闭源的,其日志大小约为 36MB。

我的 Linux 发行版是 RHEL7。

问题

我想通过压缩和旋转日志来减少浪费的空间。

  1. 由于应用程序已经将日志拆分为新文件,是否可以自动压缩目录中新创建的文件?
  2. 是否可以自动删除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在目录上循环运行以绑定logrotateinotify/ epoll

echo -n /usr/share/foreman-proxy/Ansible/CIS/audit/Assessor-CLI-4.0.2/logs/
  | ./entr -dnc logrotate --force /etc/logrotate.d/newlogrotateconf

相关内容