logrotate:保留 N 个最新文件,但不重命名

logrotate:保留 N 个最新文件,但不重命名

我有一项服务,可在启动时自动创建一个文件名中包含时间戳的日志文件。因此,我不需要 logrotate 来重命名/复制/创建文件,但我希望 logrotate 只保留其中最新的三个文件(并可选择压缩它们)。我能以某种方式做到这一点吗?

答案1

我不确定您是否可以使用 来执行此操作logrotate。您可以将以下内容作为每日 cron 作业运行吗:

rm $(ls -t | sed -e '1,3d')

答案2

我不认为这能完全按照你的意愿完成。如果你仍然想使用 logrotate,那么首先需要指定 logrotate 轮换日志的频率(每日/每周/每月/每年)。你可以像这样设置:

# rotate log files daily
daily

# Log files are rotated count times before being removed or mailed to the address
# specified in a mail directive. If count is 0, old versions are removed rather than 
# rotated.
rotate 3

# Old versions of log files are compressed with gzip(1) by default.
compress

但正如@quanta 所写,使用 logrotate 可能无法实现这一点。您要么使用我上面写的一些类似设置,要么可能需要使用其他工具。

答案3

我试图为 ProxySQL 的日志文件找到类似的 logrotate 解决方案,它看起来像:

/var/lib/proxysql/queries.log.00000377
/var/lib/proxysql/queries.log.00000378
/var/lib/proxysql/queries.log.00000379
/var/lib/proxysql/queries.log.00000380
/var/lib/proxysql/queries.log.00000381

最后我放弃了 logrotate 并只采用了一个简单的 cron 解决方案:

# Delete old query log files 60 days old
0 4 * * * find /var/lib/proxysql -name 'queries.log.*' -mtime +60 -delete

# compress 5 day old query log files
30 4 * * * find /var/lib/proxysql -name 'queries.log.????????' -mtime +5 -exec gzip {} \;

相关内容