尝试创建 Rsync 的 cron,然后 tar 文件夹

尝试创建 Rsync 的 cron,然后 tar 文件夹

我被困在第一个障碍了!

我想从 bash 脚本运行几个命令。首先像这样 rsync 一些目录:

rsync -e ssh -az [email protected]:/home /location/of/local/folder

然后像这样将文件压缩并复制到其他地方:

cd /location/of/local/folder
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz home

我希望这是有道理的。

问题是显然我希望 rsync 在目录被 tar 之前完成。那么,我可以使用一些代码来确保 rsync 在运行tar命令之前已完成吗?

例如(伪代码)

rsync
while(is syncing){
    sleep 10
}
tar

或者我的.sh脚本只会在第一行完成并退出后运行下一行?

答案1

shell 脚本中的命令是按顺序执行的。如果您的第一个命令是,则下一个命令在完成rsync之前不会执行。rsync

您想要确保的是rsync在继续执行下一个命令之前成功完成。

这不是最优雅的解决方案,但却是最容易实现的。

rsync -e ssh -az [email protected]:/home /location/of/local/folder &&\
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder

请记住,这仅在退出状态为 时才rsync有效0。任何其他退出状态和命令 2 将不会运行。

AND 和 OR 列表是由 && 分隔的多个管道之一的序列
和||分别控制运算符。 AND 和 OR 列表被执行
具有左结合性。 AND 列表的形式为
    命令1 && 命令2
当且仅当 command1 返回退出状态为零时,command2 才会执行。

如果您根据rsync退出值执行不同的操作,则可以为脚本添加更多智能。

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin

rsync -e ssh -az [email protected]:/home /location/of/local/folder

if [ $? != "0" ]
  then
   echo "There was a problem"
  else
   tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
 fi

相关内容