我有这个 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>
值为0
时rotate
,将logrotate
删除日志的旧版本,而不是轮换。您的情况就是这样的。
因此,请使用合理的指令值来rotate
满足您的需求。例如,值为7
将执行 7 次旋转。如果日志很大,compress
还请查看。