我有一项服务,可在启动时自动创建一个文件名中包含时间戳的日志文件。因此,我不需要 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 {} \;