Logrotate:如何在postrotate中访问输出文件


15

Nginx每天轮换日志(带有dateext)。轮换后,我想解析刚刚过去的一天的文件,并用Nginx服务器返回的错误数量编译一封电子邮件。

如何访问的postrotate / endscript部分中的输出文件logrotate


您能详细说明吗?
哈立德

做完了 抱歉,我认为这很清楚。:)
ibz

Answers:


4

如果您要查找的是变量,我不知道可以使用任何变量。但是,在旋转日志之后,您应该根据为旋转(/var/log/somefile.1或类似设置)设置的配置,准确地知道文件已旋转到的名称。

如果您描述了要解决的实际问题,也许更容易回答?


我认为这个问题无关紧要。现在详细解释它。是的,我可以使用日期来获取文件名,但是我希望可以通过一些变量或其他方式来获取文件名,这更有意义。
ibz

3
看起来幼虫完全满足了您的需求。$ 1是您要查找的变量。
马克

17

如果未使用“ sharedscripts”指令,则您的postrotate脚本将触发日志轮换的文件作为$ 1接收。如果您尝试将通用脚本与多个logrotate节一起使用,这可能会有所帮助。也就是说,给定这样的东西:

/var/log/sample1.log /var/log/sample[23].log {
  ..config...
}

如果需要旋转任何匹配的文件,将以$ 1设置为“ /var/log/sample1.log”、“/var/log/sample2.log”或“ /var/log/sample3.log”调用脚本。 “ 作为适当的。然后,您可以附加“ .1”以查找刚刚旋转的文件。

如果使用“ sharedscripts”选项,则将在$ 1设置为“ /var/log/sample1.log /var/log/sample[23].log”的情况下调用脚本(这将有助于您识别特定的节,但是不是确切的文件)。

希望这给您一个起点。请注意,这仅适用于logrotate> v3.7.5。


1
便利。实际上,旋转前和旋转后脚本似乎都接收到旋转后的文件名$ 1,这正是问题的根源。
标记

1
@mark脚本接收输入文件的名称,而不是输出文件的名称
kbolino '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.