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

kzy*_*kov 7 logrotate

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

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

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
    # ...
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Ale*_*yak 7

您可以通过实施此kludge来实现您所寻求的目标:

my-logrotate.conf(注意:双引号"是必需的,还要注意文件名不必出现在同一行上)

"*.log"
"some_sub_dir/*.log"
{
    missingok
    # and so on
    # ...
}
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/sh

set -eu

cd "${my_app_log_dir}"
exec logrotate /path/to/my-logrotate.conf
Run Code Online (Sandbox Code Playgroud)

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


Ber*_*Ber 5

您可以在安装时或运行 logrotate 之前使用 bash 的“此处文档”动态创建合适的配置文件。

bash 脚本可能如下所示:

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

logrotate  rt.conf
Run Code Online (Sandbox Code Playgroud)


gra*_*fic 1

直接在配置文件中没有(据我对 logrotate 的了解)。

其他解决方案:

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