Como copiar arquivos de outros servidores se a máquina local estiver inativa

0

Eu tenho um script que será executado em cada servidor e copia determinados arquivos para ele. O script sabe onde estou executando e quais arquivos eu preciso copiar.

O script copia os arquivos do datacenter local local_dc , mas se estiver inoperante ou não estiver respondendo, copiará os mesmos arquivos do datacenter remoto remote_dc_1 e, se isso também estiver inativo, copiará os mesmos arquivos de outro datacenter remote_dc_2 como mostrado abaixo -

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."

Agora, minha pergunta é:

  • Digamos que se a máquina local_dc estiver inoperante, será que ela copiará definitivamente da máquina remote_dc_1 , com certeza? E se remote_dc_1 machine também estiver inativa, então também copiará de remote_dc_2 ?
  • Agora, se todas as três máquinas estiverem paradas, o que acontecerá? Neste caso, quero imprimir a mensagem dizendo que todas as três máquinas estão inativas, saindo assim do script de shell.

Eu não posso testar isso adequadamente sem desligar a máquina.

    
por arsenal 02.04.2015 / 19:53

2 respostas

1

Sim. Ele tentará copiar do primeiro, se falhar, tentará o segundo e, se falhar, tentará o terceiro. Para mandar um e-mail para você no final, use isto:

scp ... || scp ... || scp || echo "All attempts failed" | mailx -r "[email protected]"

Para que cada comando scp informe se ele falhou, você pode usar subshells:

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]"
    
por 03.04.2015 / 01:29
1

O que acontecerá será baseado nos comandos que você instruir seu script a ser executado. Eu não sou um codificador mestre, mas recentemente tive uma situação semelhante.

O que eu fiz foi apenas para criar algumas variáveis para os servidores possíveis, em seguida, use um loop para testar a conexão com esses IP, quando encontrar isso funciona, defina esse IP como o que usar (FTPHOST):

USER = nome de usuário

PASS = senha

attempt1 = your.first.server.ip

attempt2 = your.second.server.ip

attempt3 = your.third.server.ip

curl --connect-timeout 5 ftp: // $ USER: $ PASS @ $ attempt1 > > / dev / null 2 > & 1;

se [$? == '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

etc, repita o loop para quantos IPs possíveis você tiver até encontrar em que funciona. Se nada funcionar, é claro que você não baixará nada de lá, então faça seu script se comportar de acordo.

    
por 02.04.2015 / 20:22