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

これが意味があることを願っています。

問題は、明らかにディレクトリがtarredされる前にrsyncが完了したいということです。もしそうなら、tarコマンドを実行する前にrsyncが完了したことを確認するために使用できるコードはありますか?

たとえば(擬似コード)

rsync
while(is syncing){
    sleep 10
}
tar

それとも、.sh最初の行が完了して終了した後にのみ、私のスクリプトは次の行を実行しますか?

答え1

シェルスクリプトのコマンドは順次実行されます。最初のコマンドが完了すると、次のコマンドは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リストは、&&で区切られたいくつかのパイプの1つのシーケンスです。
と|| AND リストと OR リストが実行されます。
関連性を残しました。 ANDリストの形式は次のとおりです。
    コマンド 1 && コマンド 2
command2 は command1 が終了状態 0 を返した場合にのみ実行されます。

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

関連情報