带有 rsync 的 Ubuntu Cronjob

Posted

技术标签:

【中文标题】带有 rsync 的 Ubuntu Cronjob【英文标题】:Ubuntu Cronjob with rsync 【发布时间】:2013-04-08 12:44:38 【问题描述】:

目前在工作场所服务器上,我们每天运行一次备份,由于大小限制,我们需要每隔三天(或类似的时间)进行一次备份。我们使用 Rsync 进行备份。我想做的只是改变脚本的运行时间,所以每天都会运行一次。

所以我想知道这是否可能?我担心的是大小不会缩小,因为备份仍将执行仅一天的“3 天备份”。这很难解释,所以我将举例说明。

我想要什么:

第 1 天 - 运行备份 第 2 天 第三天 第 4 天 - 运行备份 第 5 天

我担心会发生什么:

第 1 天 - 运行备份 第 2 天 - 从第 4 天开始应用备份 第 3 天 - 从第 4 天开始应用备份 第 4 天 - 运行备份 第 5 天

crontab 作业如下所示:

5 7 * * * ../rsyncsnapshot.sh 每天 30

脚本如下所示

if [ $# != 2 ]; then
echo "Usage: backup.sh interval_name count"
exit 1
fi

NAME=$1
COUNT=$2

TIMESTAMP=`date -u "+%Y-%m-%d %H:%M:%S%z"`
echo "*** Backup started $TIMESTAMP (interval $NAME, count $COUNT) ***"

echo "Deleting $DEST_DIR/$NAME.$((COUNT-1))"
ssh $DEST_HOST rm -rf $DEST_DIR/$NAME.$(($COUNT-1))

for i in `seq $(($COUNT-1)) -1 2`;
do
  j=$(($i-1))
  echo "Moving $DEST_DIR/$NAME.$j to $DEST_DIR/$NAME.$i"
  ssh $DEST_HOST mv $DEST_DIR/$NAME.$j $DEST_DIR/$NAME.$i
done

echo "Copying $DEST_DIR/$NAME.0 to $DEST_DIR/$NAME.1"
ssh $DEST_HOST cp -al $DEST_DIR/$NAME.0 $DEST_DIR/$NAME.1

echo "Copying source ($SRC) to $DEST_HOST:$DEST_DIR/$NAME.0/"
rsync $RSYNC_ARGS $SRC $DEST_HOST:$DEST_DIR/$NAME.0/
ssh $DEST_HOST touch $DEST_DIR/$NAME.0

TIMESTAMP=`date -u "+%Y-%m-%d %H:%M:%S%z"`
echo "*** Backup ended $TIMESTAMP ***"
echo "Quota as follows:"
ssh $DEST_HOST quota

【问题讨论】:

脚本在哪里检查自上次备份以来是否已经 3 天? 如果文件每天都在变化,那么每日备份会导致文件每3天复制3份,而3天备份只会导致每3天复制1份。所以你会节省空间。 我认为它不会检查任何地方,唯一遗漏的代码是服务器信息和路径 :) - 所以,如果我将 crontab 更改为每三天运行一次,我会得到 1 个副本第三天? 是的。但是您只能为备份之间多天修改的文件节省空间。如果您在第 1 天更改 file1,在第 2 天更改 file2,在第 3 天更改 file3,则不会节省任何费用。备份会更小,但不会是 1/3。 想了很多,有没有更聪明的方法来做到这一点?我的意思是节省磁盘空间?除了减少备份之外。 【参考方案1】:

要显着减少使用的空间量,您需要减少保留的副本数量。这是脚本的第二个参数。因此,如果您每 3 天运行一次,并希望保留一个月的备份,请将其更改为:

../rsyncsnapshot.sh daily 10

【讨论】:

以上是关于带有 rsync 的 Ubuntu Cronjob的主要内容,如果未能解决你的问题,请参考以下文章

运行带有cronjob的结果需要时间的页面[关闭]

ubuntu使用脚本调用脚本,并用cron做定时任务,为啥执行不了

CronJob 没有运行

CronJob 没有运行

CronJob 没有运行

如何在不询问密码提示的情况下自动执行rsync [关闭]