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 作业中使用它。
Logrotate 会轮换文件,所以答案是肯定的 - 可能,如果没有足够的权限,则将它们放在 /backup 或其他位置。检查轮换日志有哪些组和用户:-)。
\n\nlogrotate 中有压缩选项,如果未配置“压缩”,则 s\xc3\xa5 - 那么它不会尝试。同样在您的情况下,“旋转 5”选项。
\n\n查看 /etc/logrotate.d (或者它存储在系统中的任何位置)
\n