.lzo
リモートサーバーからファイルをコピーするスクリプトがあります。スクリプトは3つのサーバーのそれぞれで複製を試み、サーバーの1つでエラーが発生した場合に電子メールが送信されます。
私のスクリプトは次のようになり、期待どおりに動作します。
export status_dir=$(mktemp -t -d transfer.XXXXXX)
cleanup() { rm -rf "$status_dir"; }
trap cleanup 0 # automatically clean up on exit
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/. \
|| { touch "$status_dir/local_down" && scp david@"$remote_dc_1":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/primary_down" && scp david@"$remote_dc_2":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/secondary_down"; exit 1; }
}
parallel -j 12 do_Copy {} $PRIMARY ::: "${PARTITION_DATA_1[@]}" &
parallel -j 12 do_Copy {} $SECONDARY ::: "${PARTITION_DATA_2[@]}" &
wait
[[ -e "$status_dir/local_down" ]] && \
mailx -r "[email protected]" -s "$local_dc machine down" "[email protected]" \
<<<"Local machine $local_dc was down, so copied from Primary Remote machine $remote_dc_1"
[[ -e "$status_dir/primary_down" ]] && \
mailx -r "[email protected]" -s "$remote_dc_1 machine down" "[email protected]" \
<<<"Primary Remote machine $remote_dc_1 was down, so copied from Secondary Remote machine $remote_dc_2"
[[ -e "$status_dir/secondary_down" ]] && \
mailx -r "[email protected]" -s "All three machine's are down" "[email protected]" \
<<<"All three machines are down. Exiting out."
上記のスクリプトが完了したら、2番目のスクリプトを実行してすべてのファイルを解凍.lzo
して削除します。
#!/bin/bash
set -e
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
parallel lzop -dU -- ::: {"$PRIMARY","$SECONDARY"}/*.lzo
これら2つのスクリプトを組み合わせたいです。 2番目のファイルを実行するのではなく、1番目のファイルも解凍して削除します.lzo
。以下のコードブロックのみが修正されると仮定していますが、マシンダウンかどうかを確認するために使用するテストのために何を追加するのかわかりません。
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/. \
|| { touch "$status_dir/local_down" && scp david@"$remote_dc_1":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/primary_down" && scp david@"$remote_dc_2":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/secondary_down"; exit 1; }
}
結合されたスクリプトが最良の選択ですか?それとも、以前にやったことを続けて、2つのスクリプトを持たなければなりませんか?今のように、.lzo
圧縮されていないファイルを同時にアーカイブし、後で削除するためにより多くのディスク容量が必要ですか?.lzo
答え1
もちろん、組み合わせることもできます。サーバーが起動するかどうかはまったく関係ありません。どのサーバーからダウンロードしても、.lzo
ファイルは常に同じ場所にあります。また、スクリプトが1つでも2つでも必要なディスク容量に違いはありません。なぜこれを行うべきですか?どちらの場合も、同じファイルを解凍しています。コピー機能に2番目のスクリプトの行を追加するだけです。
do_Copy() {
el=$1
PRIMSEC=$2
scp david@"$local_dc":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/. \
|| { touch "$status_dir/local_down" && scp david@"$remote_dc_1":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/primary_down" && scp david@"$remote_dc_2":"$dir3"/new_clients_2014_"$el"_200003_5.data.lzo "$PRIMSEC"/.; } \
|| { touch "$status_dir/secondary_down"; exit 1; }
}
PRIMARY=/test01/primary
SECONDARY=/test02/secondary
parallel lzop -dU -- ::: {"$PRIMARY","$SECONDARY"}/*.lzo