logrotate配置文件中是否支持变量?

时间:2009-11-19 09:09:56

标签: logrotate

我在/etc/logrotate.d目录中查看了logrotate.conf示例和所有内容。我无处可找到这些文件中变量的文档。

我正在尝试创建一个配置文件,用于旋转我们正在编写的应用程序的日志。我想设置一次存储日志的目录,然后将其用作变量,如下所示:

my_app_log_dir=/where/it/is/deployed/logs

${my_app_log_dir}/*.log ${my_app_log_dir}/some_sub_dir/*.log {
    missingok
    # and so on
    # ...
}

这可能吗?

4 个答案:

答案 0 :(得分:7)

您可以通过实施此方法来实现您的目标:

my-logrotate.conf(注意:双引号"是强制性的,同时请注意文件名不必出现在同一行上)

"*.log"
"some_sub_dir/*.log"
{
    missingok
    # and so on
    # ...
}

然后是实际的logrotate脚本 - my-logrotate.sh

#!/bin/sh

set -eu

cd "${my_app_log_dir}"
exec logrotate /path/to/my-logrotate.conf

现在您可以将logrotate.sh添加到您的crontab。

答案 1 :(得分:2)

您可以使用bash" here document"在安装时或运行logrotate之前动态创建合适的配置文件。

bash脚本可能如下所示:

cat >rt.conf <<.
"${my_app_log_dir}/*.log" {
    rotate 5
    size 15k
    missingok
}
.

logrotate  rt.conf

答案 2 :(得分:1)

直接在配置文件中没有(据我所知,在logrotate中)。

其他解决方案:

  • 使用include选项从目录中包含部分配置文件。如果你的应用程序有一个软件包,这可以帮助你,软件包可以在该目录中保留一个只包含你的应用程序条目的文件。

答案 3 :(得分:0)

使用logrotate 3.8.7,测试显示您可以在旋转前和旋转后脚本部分中设置和使用变量。

我尝试过使用特定的服务日志文件。

CityText "10"

在强制模式下运行logrotate以确保日志文件已旋转并执行了post-rotate脚本后,在/ run / some_service中查找时,还有一个附加文件“ some_serviced.pid.WAS_USED”,从而证明了使用起作用的变量。