我有一个备份脚本,可以压缩各种文件和目录并创建 .tgz 档案。文件命名如下:
...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz
我想管理这些文件,以便只保留最后 5 个备份,并删除较旧的文件。
我可以使用 logrotate 来执行此操作吗?它们不是日志文件,并且已经压缩。它们位于 /root 中,而不是 /var/log 中 - 我还能使用它吗?
谢谢
答案1
Logrotate 会轮换文件,所以答案是肯定的 - 可能,如果没有足够的权限,则将它们放在 /backup 或其他地方。检查轮换日志属于哪个组和用户 :-)。
logrotate 中有压缩选项,所以如果没有配置“压缩”,那么它就不会尝试。同样,对于你的情况,还有“rotate 5”选项。
查看 /etc/logrotate.d(或系统中存储的任何位置)
答案2
如果不更改您的进程,logrotate 本身将无法完成您在此处寻找的任务。这里的关键问题是,虽然 logrotate 可以使用通配符,但如果您这样做,它不会将文件视为一个文件,而是会尝试单独轮换所有文件,这绝对不是您想要的。
但是,只要创建最新的备份时没有日期戳,您就可以按照您描述的方式进行操作。/root/backup.tar.gz
例如,如果您的备份过程创建了以下内容,则可以使用以下 logrotate 配置:
/root/backup.tar.gz {
rotate 5
nocompress
dateext
dateformat _%Y-%m-%d
extension .tar.gz
missingok
}
以下是选项的简要概述:
rotate 5
-- 删除前保留 5 次旋转nocompress
-- 旋转后不压缩文件dateext
-- 使用日期作为旋转扩展,而不是增加数字dateformat _%Y-%m-%d
-- 设置要使用的日期扩展格式extension .tar.gz
-- 使.tar.gz
旋转扩展之后missingok
-- 如果我们想要旋转的文件不存在,不要担心并继续(默认是抛出错误)
希望这可以帮助!
答案3
您不必使用 logrotate 来执行此操作。只需使用如下命令:
ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1
此命令将保留最近的 5 个文件并删除剩余文件(如果有)。您可以在 cron 作业中使用它。
答案4
将日期移至扩展名并使用带通配符的解决方案这个答案:
/opt/jboss/log/server.log.* {
missingok
rotate 0
daily
maxage 30
}