如何使用 logrotate 移动压缩文件

如何使用 logrotate 移动压缩文件

这可能非常容易做到,但我找不到与该主题相关的任何内容。我正在为我们服务中的日志设置一个自定义 logrotate.conf 文件。作为其中的一部分,我想保留最多 7 天的日志,压缩任何超过 7 天的内容,并删除任何超过 22 天的内容。到目前为止,我正在尝试测试是否可以将压缩文件移动到另一个目录,以防止主日志目录变得太混乱。

到目前为止,我的规则如下:

/home/user1/logs/profile_service/*.log
{
    daily
    rotate 7
    copytruncate
    compress
    postrotate
                mv /home/user1/logs/profile_service/*.gz /home/user1/logs/archive/profile_service/
    endscript
}

我的理解是,postrotate 应该将这些 .gz 文件移动到存档目录中。但是,当我手动运行 logrotate 时:

logrotate -f /home/user1/logrotate.conf

它旋转日志并将日期附加到文件,但无法压缩日志,并且没有任何内容进入存档:

mv: cannot stat ‘/home/user1/logs/profile_service/*.gz’: No such file or directory
logrotate_script: line 2: compress: command not found
error: error running non-shared postrotate script for /home/user1/logs/profile_service/profile.log of '/home/user1/logs/profile_service/*.log
'

当我不包括postrotate来移动文件时,文件会被正常压缩。

答案1

尝试lastaction/endscript

从手册页中:

在轮换所有符合通配符模式的日志文件之后、运行 postrotate 脚本之后并且只有轮换至少一个日志时,才会执行一次(使用 /bin/sh)lastaction 和 endscript 之间的行(它们必须单独出现在行中)。这些指令只能出现在日志文件定义中。整个模式作为第一个参数传递给脚本。如果脚本因错误而退出,则只会显示一条错误消息(因为这是最后一个操作)。另请参阅 firstaction。

相关内容