各サーバーで実行され、特定のファイルをコピーするスクリプトがあります。スクリプトは、私が実行している場所とコピーする必要があるファイルを知っています。
スクリプトはローカルデータセンターからファイルをコピーしますlocal_dc
が、操作が中断または応答しない場合はリモートデータセンターから同じファイルをコピーし、操作が中断された場合は示されているようにremote_dc_1
別のリモートデータセンターから同じファイルをコピーします。remote_dc_2
下に -
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_1":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_2":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/.
}
export -f do_Copy
# copying 5 files in parallel simultaneously in primary and secondary folder
parallel --retries 10 -j 5 do_Copy {} $PRIMARY ::: $primary_partition &
parallel --retries 10 -j 5 do_Copy {} $SECONDARY ::: $secondary_partition &
wait
echo "All files copied successfully."
今私の質問は次のとおりです。
local_dc
マシンがダウンしたら、確実にremote_dc_1
マシンからコピーされると思いますか?システムもダウンした場合remote_dc_1
に複製されますかremote_dc_2
?- 今、3台のマシンがすべてダウンしたらどうなりますか?この場合、メッセージを印刷したいと思います。 3 台のシステムがすべて終了したので、シェルスクリプトを終了します。
機械の電源を切らないと、これを正しくテストできません。
答え1
はい。最初のアイテムからコピーを試み、失敗した場合は2番目のアイテムを試し、失敗した場合は3番目のアイテムを試します。最後にメールを受信するには、次のコマンドを使用します。
scp ... || scp ... || scp || echo "All attempts failed" | mailx -r "[email protected]"
各scpコマンドが失敗したかどうかを知らせるには、サブシェルを使用できます。
scp ... || (echo "machine1 down" | mailx -r "[email protected]"&& scp ... ) ||
( echo "machine2 down" | mailx -r "[email protected]" && scp ... ) ||
echo "All attempts failed" | mailx -r "[email protected]"
答え2
何が起こるかは、スクリプトに実行するように指示したコマンドによって異なります。私は専門家ではありませんが、最近同様の状況を経験したことがあります。
私がしたことは、可能なサーバーのいくつかの変数を作成し、ループを使用してそのIPへの接続をテストして動作することを確認したら、そのIPを使用するIPに設定することです(FTPHOST)。
ユーザー=ユーザー名
パス=パスワード
試行1=your.first.server.ip
試行2=your.second.server.ip
試行3=your.third.server.ip
カール --connect-timeout 5 ftp://$USER:$PASS@$attempt1 >> /dev/null 2>&1;
if [$? =='0'];
then
FTPHOST=$attempt1;
echo "FTPHOST set to $FTPHOST"
else
echo "Connection to $attempt1 failed. Attempting next IP";
curl --connect-timeout 5 ftp://$USER:$PASS@$attempt2 >> /dev/null 2>&1;
if [ $? == '0' ];
then
そして、動作するIPが見つかるまで、できるだけ多くのIPを介してループを繰り返します。両方が機能しない場合は、もちろん何もダウンロードされませんので、それに応じてスクリプトを実行してください。