Logrotate:旋转非日志文件?

jen*_*jen 21 linux log-files 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
Run Code Online (Sandbox Code Playgroud)

我想管理这些文件,以便只保留最后 5 个备份,并删除旧文件。

我可以使用 logrotate 来做到这一点吗?它们不是日志文件并且已经被压缩。它们位于 /root 而不是 /var/log - 我还能使用它吗?

谢谢

mar*_*ark 30

如果不更改您的流程,logrotate 本身将无法执行您在此处寻找的操作。这里的关键问题是,虽然 logrotate 可以使用通配符,但如果您这样做,它不会将文件视为一个文件,而是尝试单独旋转所有文件,这绝对不是您想要的。

但是,只要创建的最新备份没有日期戳,您就可以按照您描述的方式使其工作。/root/backup.tar.gz例如,如果您备份进程创建,您可以使用以下 logrotate 配置:

/root/backup.tar.gz {
    rotate 5
    nocompress
    dateext
    dateformat _%Y-%m-%d
    extension .tar.gz
    missingok
}
Run Code Online (Sandbox Code Playgroud)

此处选项的快速概述:

  • rotate 5 -- 删除前保持 5 次旋转
  • nocompress -- 旋转后不要压缩文件
  • dateext -- 使用日期作为轮换扩展名而不是递增数字
  • dateformat _%Y-%m-%d -- 设置要使用的日期扩展格式
  • extension .tar.gz-- 使.tar.gz旋转扩展后的来
  • missingok -- 如果我们要旋转的文件不存在,不要担心并继续(默认是抛出错误)

希望这可以帮助!


Kha*_*led 24

您不必使用 logrotate 来执行此操作。只需使用这样的命令:

ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

此命令将保留最近的 5 个文件并删除剩余的(如果有)。您可以在 cron 作业中使用它。

  • 问题是保留五个最近的备份,而这正是这样做的。更简单: ls -t1 /root/backup_* | 尾 -n +6 | xargs rm -f (5认同)

3mo*_*olo 3

Logrotate 会轮换文件,所以答案是肯定的 - 可能,如果没有足够的权限,则将它们放在 /backup 或其他位置。检查轮换日志有哪些组和用户:-)。

\n\n

logrotate 中有压缩选项,如果未配置“压缩”,则 s\xc3\xa5 - 那么它不会尝试。同样在您的情况下,“旋转 5”选项。

\n\n

查看 /etc/logrotate.d (或者它存储在系统中的任何位置)

\n