各サーバーで実行され、特定のファイルをコピーするスクリプトがあります。スクリプトは、私が実行している場所とコピーする必要があるファイルを知っています。
スクリプトはローカルデータセンターからファイルをコピーします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]"