Logrotate 正在删除我的日志

Logrotate 正在删除我的日志

我有这个 logrotate 配置不是在 /etc/logrotate.d 中

/path/to/my/logfile.log {
    su root root
    daily
    maxage 365000
    copytruncate
    dateext
    dateformat -%d.%m.%Y
}

我使用 crontab 来运行它:

59 23 * * * root logrotate /path/to/my/logrotate/config > /some/logfile

每天我只能看到两个日志文件,截断的 logfile.log 和新的 logfile.log-DD-MM-YYYY 文件。所有旧日志都被删除了。

每天我都会复制新的轮换文件并为其赋予新名称,但第二天前一天的日志就消失了。我该如何解决这个问题?

答案1

您的配置中需要以下行:

rotate <count>

替换<count>为您希望在删除最旧的轮换日志之前轮换日志的次数。因此五次将是:

/path/to/my/logfile.log {
    su root root
    daily
    maxage 365000
    copytruncate
    dateext
    dateformat -%d.%m.%Y
    rotate 5
}

您可以查看logrotate手册页以获取更多信息。

答案2

您没有使用rotate指令来指定要保留多少次日志旋转,即要进行多少次旋转。如果没有提及,则参数的默认值为0

config.c来源处logrotate检查rotateCount

int readAllConfigPaths(const char **paths)
{
    int i, result = 0;
    const char **file;
    struct logInfo defConfig = {
                .pattern = NULL,
                .files = NULL,
                .numFiles = 0,
                .oldDir = NULL,
                .criterium = ROT_SIZE,
                .threshhold = 1024 * 1024,
                .minsize = 0,
                .maxsize = 0,
                .rotateCount = 0,
                ...
                <truncated>

值为0rotate,将logrotate删除日志的旧版本,而不是轮换。您的情况就是这样的。

因此,请使用合理的指令值来rotate满足您的需求。例如,值为7将执行 7 次旋转。如果日志很大,compress还请查看。

相关内容