Quão confiável seria baixar mais de 100.000 arquivos via wget de um arquivo Bash sobre SSH?
Pergunta
Eu tenho um arquivo bash que contém comandos wget para baixar mais de 100.000 arquivos, totalizando cerca de 20 GB de dados.
O arquivo Bash se parece com:
wget http://something.com/path/to/file.data
wget http://something.com/path/to/file2.data
wget http://something.com/path/to/file3.data
wget http://something.com/path/to/file4.data
E existem exatamente 114.770 linhas disso. Quão confiável seria para SSH em um servidor em que tenho uma conta e execute isso? A minha sessão de SSH foi eventualmente? Eu teria que ser ssh'ed o tempo todo? E se meu computador local travar/desligar?
Além disso, alguém sabe quantos recursos isso levaria? Estou louco por querer fazer isso em um servidor compartilhado?
Eu sei que essa é uma pergunta estranha, apenas imaginando se alguém tem alguma idéia. Obrigado!
Solução
Usar
#nohup ./scriptName &> logname.log
Isso garantirá
- O processo continuará mesmo se a sessão ssh for interrompida
- Você pode monitorar, pois está em ação
Também recomendará que você possa ter algum prompt em intervalos regulares, será bom para análise de log. por exemplo #echo "1000 files copied"
No que diz respeito à utilização de recursos, depende inteiramente do sistema e principalmente das características da rede. Teoricamente, você pode calcular o tempo com apenas tamanho de dados e largura de banda. Mas na vida real, atrasos, latências e perdas de dados entram em cena.
Então faça algumas manchas, faça algumas matemáticas e você receberá a resposta :)
Outras dicas
Depende da confiabilidade do meio de comunicação, hardware, ...!
Você pode usar screen
Para mantê -lo funcionando enquanto você se desconecta do computador remoto.
Você deseja desconectar o script do seu shell e executá -lo em segundo plano (usando nohup), para que ele continue em execução quando você logo sair.
Você também deseja ter algum tipo de indicador de progresso, como um arquivo de log que registra todos os arquivos que foram baixados e também todas as mensagens de erro. O Nohup envia o Stderr e o stdout para os arquivos. Com esse arquivo, você pode pegar downloads quebrados e execuções abortadas posteriormente.
Faça um teste primeiro com um pequeno conjunto de arquivos para ver se você obteve o comando e gosta da saída.
Eu sugiro que você o separe da sua concha com nohup
.
$ nohup myLongRunningScript.sh > script.stdout 2>script.stderr &
$ exit
O script será executado até a conclusão - você não precisa ser conectado o tempo todo.
Verifique se há quaisquer opções que você possa fornecer para fazê -lo novamente na falha.
Se for possível, gere somas de verificação MD5 para todos os arquivos e use -os para verificar se todos foram transferidos corretamente.
Comece com
nohup ./scriptname &
E você deve ficar bem. Além disso, eu recomendaria que você registre o progresso para poder descobrir onde ele parou se o fizesse.
wget url >>logfile.log
pode ser suficiente.
Para monitorar o progresso ao vivo, você pode:
tail -f logfile.log
Pode valer a pena olhar para uma tecnologia alternativa, como rsync. Eu o usei em muitos projetos e funciona muito, muito bem.