Logrotate:旋转非日志文件?

Logrotate:旋转非日志文件?

我有一个备份脚本,可以压缩各种文件和目录并创建 .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
}

相关内容