.lzoファイルをscpしてから.lzoファイルを解凍して削除します。

.lzoファイルをscpしてから.lzoファイルを解凍して削除します。

.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

関連情報