脚本如何循环30天?

脚本如何循环30天?

我有一个脚本,backup.sh,它可以创建 MySQL 数据库的备份,然后将其 SCP 到远程服务器。这个脚本运行良好,我可以使用 crontab 每天运行一次,没有任何问题。

但是,我只想存储最近 30 天的备份,否则几个月后我将拥有数百个冗余 SQL 文件。我真的不知道从哪里开始。我能想到的唯一方法是设置 31 个子文件夹,每个月的每一天一个,然后每天替换每个文件。但这不太理想,而且感觉有点脏。

下面是我的 backup.sh 文件的内容,其中的一些关键信息明显被删除了:

#!/bin/bash
today=`date +%Y-%m-%d.%H%M%S`

mysqldump -u rails -p******** rails > backups/backup-$today.sql
sshpass -p '********' scp backups/backup-$today.sql m***d@******.co.uk:custom_backups/backup-$today.sql

答案1

你能在远程机器上 ssh 吗?如果可以,你可以编写脚本remover.sh

#!/bin/bash
sshpass -p '********' ssh m***d@******.co.uk: "ls -t custom_backups/backup-*.sql | sed -n -e '31,1000 s#^#custom_backups/#p' | xargs rm -f"

怎么运行的?

ls -t custom_backups/backup-*.sql

列出按时间排序的所有文件 - 最旧最后

| sed -n -e '31,1000 s#^#custom_backups/#p'

sed 添加目录前缀(custom_backups/)并仅打印(感谢p开关)从 31 到 1000 范围内的行(文件名)。

| xargs rm -f

xargs 删除列出的文件。-f开关保证如果列表为空,即您有 30 个或更少的备份文件,则不会出现错误。

仅当远程计算机上至少有 30 个备份时,脚本才会删除最旧的文件

答案2

有大量的示例脚本可以展示如何执行此操作,只需在网上搜索“轮换备份”示例即可。

此外,您尝试执行此操作的机器上可能至少有一个模板脚本:大多数发行版都带有日志轮换功能,您也可以在这些脚本中找到灵感:-)

因此,请查看 crontab 以查看其中是否提到任何日志轮换,或者检查操作系统的文档。

答案3

我针对这个问题使用了两种解决方案:

  1. 如上所述,每天创建一个备份。问题是 - 您无法拥有较旧的备份。
  2. 在目录中创建备份,然后 - 使用脚本 - 我保留(例如):
    • 过去 30 天的备份
    • 每周日的备份不超过 1 年
    • 每月每天备份
    • 其余一切-删除。

相关内容