10

我查看了 /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

4 回答 4

10

You can achieve what you are looking for by implementing this kludge:

my-logrotate.conf ( NOTE: double quotes " are mandatory, also note that file names don't have to appear on the same line )

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

Then the actual logrotate script - my-logrotate.sh

#!/bin/sh

set -eu

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

Now you can add logrotate.sh to your crontab.

于 2010-12-11T14:23:38.240 回答
5

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

bash 脚本可能如下所示:

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

logrotate  rt.conf
于 2016-03-23T09:35:53.060 回答
1

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

其他解决方案:

  • 使用 include 选项从目录中包含部分配置文件。如果您的应用程序有一个包,这可以帮助您,该包可以在该目录中保留一个文件,该文件仅包含您的应用程序的条目。
于 2009-11-19T09:24:14.243 回答
1

使用 logrotate 3.8.7,测试表明您可以在 pre-rotate 和 post-rotate 脚本部分设置和使用变量。

我为特定的服务日志文件尝试了这个。

   postrotate
         pid_file="/run/some_service/some_serviced.pid"
         test -e "${pid_file}" && kill -s HUP $(cat "${pid_file}") || true
         touch "${pid_file}.WAS_USED"
   endscript

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

于 2020-07-27T21:20:48.913 回答