Eu tenho um script que copia arquivos .lzo
de um servidor remoto. O script tentará copiar de cada um dos três servidores e enviará um email se um deles estiver inativo.
Meu script está abaixo e funciona conforme o esperado:
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."
Quando o script acima estiver concluído, executo um segundo script para descompactar todos os arquivos .lzo
e excluí-los:
#!/bin/bash
set -e
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
parallel lzop -dU -- ::: {"$PRIMARY","$SECONDARY"}/*.lzo
Eu gostaria de combinar os dois scripts. Em vez de ter que executar um segundo, faça com que o primeiro também descompacte e exclua os arquivos .lzo
.
Estou assumindo que apenas o bloco de código abaixo será modificado, mas não tenho certeza do que devo acrescentar por causa dos testes que uso para verificar se as máquinas estão inoperantes.
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; }
}
A combinação dos scripts é a melhor opção? Ou devo continuar fazendo o que estava fazendo anteriormente e ter dois roteiros? Se eu fizer da maneira que estou fazendo agora, será necessário ter mais espaço em disco para acomodar o arquivo .lzo
e o arquivo .lzo
não compactado ao mesmo tempo e, em seguida, excluir mais tarde?