平台:

平台:

平台:

RHEL 7
logrotate-3.8.6-7.el7_2.x86_64

背景:

我在 RedHat Linux 服务器上运行着大量应用服务器,希望有一个统一的 logrotate 例程来清理日志文件。使用通配符至关重要,这样我就不必维护一个不断增长和缩小的列表。

问题:

结合通配符,“missingok”选项和“olddir”似乎不起作用。当我为调试日志文件定义一个模式(可能存在也可能不存在)并仅使用“missingok”时,一切都很好。如果我添加“olddir”选项,它会失败并显示:

# logrotate -d /etc/logrotate.d/foobar
reading config file /etc/logrotate.d/foobar
olddir is now old_logs
error: /etc/logrotate.d/foobar:28 error verifying log file path /srv/www/servers/*/logs: No such file or directory
removing last 1 log configs

配置文件:

/srv/www/servers/*/logs/*_foobar.txt
{
  daily
  olddir old_logs
  missingok
}

我看到有一个长期存在的修复http://rhn.redhat.com/errata/RHBA-2008-0703.html修复了 wildcard 和 missingok 的问题,但是有人看到或修复过 olddir 的问题吗?

我正在考虑跳过 olddir 并使用 postrotate + find/mv,但我不想这样做。

答案1

修复上游:https://github.com/logrotate/logrotate/commit/73493ec38c5e806fa66d8c3f13259775da6282d9

引用:

Fix 'olddir' usage with wildcard in the middle of path in the pattern…
… definition when the pattern did not match any log file.

答案2

我遇到了同样的问题。

使用 /var/logs/*/*/*.log 查看目录并一起使用“missingok”和“olddir”。

如果该目录下没有任何日志,它会抱怨:

验证日志文件路径 /var/logs/*/* 时出错:没有此文件或目录

@sastorsl 那么你怎么样了?

我的 logrotate 3.7.8。

它似乎已在 3.11.0 中修复。

相关内容