我一直在尝试使用 logrotate 来存储数据库备份:
我已经完成了这样的 logrotate 脚本,但只完成了每日轮换。
我错过了什么或做错了什么?日期格式 *' weekly '* 字符串是否破坏了脚本?如果是这样,如何实现为每种类型的旋转文件设置一个独特的名称?例如使用'extension .week'?
注意:我已经在每周和每月轮换中使用了 prerotate 和 postrotate 来创建一个虚拟文件来检查这些文件是否正在执行,但从未创建过这些文件。
注 2:文件 /backups/db.sql 已正确创建
#daily (son)
"/backups/db.sql" {
daily
rotate 7
missingok
copy
compress
}
#weekly (father)
"/backups/db.sql" {
weekly
rotate 4
missingok
copy
dateext
dateformat _weekly_%Y-%m-%d.
compress
prerotate
touch /backups/weekly_pre.txt
endscript
postrotate
touch /backups/weekly_post.txt
endscript
}
#monthly (grandfather)
"/backups/db.sql" {
monthly
rotate 12
missingok
copy
dateformat _monthly_%Y-%m-%d.
compress
prerotate
touch /backups/monthly_pre.txt …
Run Code Online (Sandbox Code Playgroud) 我想创建一个 shell 脚本来删除除最后 n 个文件之外的旧版本文件。换句话说,当我部署一个新版本时,只保留最后 n 个版本。
文件名具有以下格式:
appname_releasenumber_date.tar.gz
Run Code Online (Sandbox Code Playgroud)
也许有一个简单的解决方案可以做到这一点,但我不知道如何做到这一点。
我找到了这个解决方案,在 Linux 上以更简洁的方式删除文件,其中包含日期戳作为文件名的一部分,但我需要先生成一些文件以保持我想要的文件数量。