Agendar downloads pelo terminal do Linux

Publicado por Osiel em 21/02/2011

[ Hits: 8.855 ]

Blog: http://osieltux.blogspot.com

 


Agendar downloads pelo terminal do Linux



Ferramentas necessárias: cron e wget

Quem conhece as ferramentas cron e wget, provavelmente já pensou ou fez isso que eu vou mostrar. Mas quem não conhece fica aí uma forma de conhecê-los, brevemente.

Recentemente eu precisei fazer 24 downloads de episódios de uma série. Das formas que eu encontrei a mais viável era baixar de um por um no megaupload. Cada episódio com 350MB, apesar de a net ser boa, seria uma tarefa no mínimo trabalhosa.

Pensei: vou pegar todos os links e adicionar no crontab com o wget.

Primeiro breve explicação sobre o que é crontab.

crontab

Existe um arquivo /etc/crontab que serve para agendar tarefas de administração do sistema, para todo o sistema ou apenas um usuário normal. Entretanto, no nosso caso, não se faz obrigatório editar esse arquivo. Por isso, não vou entrar em muito detalhes, já que esse não é objetivo dessa dica.

Saiba que a edição abaixo mostrada também serve para este arquivo. Mesmo assim eu acredito que você deva estudá-lo.

wget

O comando wget trabalha em segundo plano e pode ser usado para configurar e executar um download sem que o usuário tenha que permanecer conectado. Isso é, você pode começar um download, interromper e continuar mais tarde. Para isso use a opção "c", sem aspas.

Chega de enrolação e vamos ao que interessa.

No terminal, como usuário normal mesmo, digite:

crontab -e

Na primeira vez que você digitar isso vai aparecer um menu para que seja escolhido seu editor de texto preferido. Eu particularmente prefiro o vim, então vou de vim mesmo.

Depois de escolhido você vai ver uma linha assim:

# m h dom mon dow command

Onde:
  • m = minutos (0 - 59)
  • h = horas (0 - 23)
  • dom = dia do mês (1 - 31)
  • mon = mês (1 - 12)
  • dow = dia da semana (0 - 6, sendo 0 igual a sábado, 1 igual a domingo, 6 igual a sexta)
  • command = comando

Pronto, explicado isso vamos editar.

No comando, digite suas opções de horário.

# minuto...hora..."dia mês"...mês..."dia semana"... comando
36 3 31 1 2 wget -c http://www617.megaupload.com/files/6d686852898c309bf6b7eae2917d32a6/LOST.s02E08.dual.audio%5Bwww.Bestuniom.Net%5D%20By%20Tyrdall.avi

Aqui temos a seguinte situação:

No minuto 36, às 3 horas da manhã do dia 31 do mês de janeiro, uma segunda feira, eu quero que o "wget -c" baixe o arquivo do endereço http://www617.megaupload.com/files/6d686852898c309bf6b7eae2917d32a6/LOST.s02E08.dual.audio%5Bwww.Bestuniom.Net%5D%20By%20Tyrdall.avi.

Um problema que você pode ver, nessa dica não tem nada que armazene o momento do fim do download, o que poderia ser usado como uma variável, ou algo assim. Já que sabemos que esses servidores, quando não se tem conta, o limite fica restrito a um download por vez.

Fica a pergunta: Quando começar o outro?

Eu também gostaria de uma forma. Mas como não tenho eu fiz o seguinte: editei para começar o novo download com o dobro do tempo que está marcando para o seu fim. Entendeu? Isso mesmo, comecei um download e na janelinha do Firefox aparece que o download vai terminar em 30 minutos, coloquei no comando para começar com um hora depois do outro. Não é forma mais correta, mas no momento é a mais viável.

Sendo assim edite a próxima linha com o tempo que você acha que vai ser suficiente e coloque quantas linha achar que pode.

Obs.: Usei aqui links do megaupload. Aquele link que já está pronto, depois da contagem dos 45 segundos.

Dica previamente publicada em meu blog: http://osieltux.blogspot.com

Outras dicas deste autor

Corrigir erro em imagem .iso pelo torrent

Leitura recomendada

Proxy ssh + ssh para acessar sites bloqueados ou recursos específicos de um ip remoto

Google Chrome no Slackware 14x

Como montar um servidor LEMP na cloud: o guia completo

Firefox - Melhorando o áudio e o vídeo

Controle de banda para VoIP no Linux

  

Comentários
[1] Comentário enviado por fabio em 21/02/2011 - 11:41h

Você pode agendar um download após o outro criando 1 arquivo com todas as URLs desejadas. Crie um arquivo texto "qualquer-nome.txt" assim:

http://www.../arquivo01.tgz
http://www.../arquivo02.tgz
http://www.../arquivo03.tgz
...
http://www.../arquivo50.tgz

E depois rode o wget assim:

wget -c -i lista qualquer-nome.txt

Ou seja, parâmetro -i seguido do nome do arquivo com as URLs.

[]'s

[2] Comentário enviado por removido em 21/02/2011 - 14:34h

Boa dica. Valeu também fábio !

Abraços.

[3] Comentário enviado por evaldoavelar em 21/02/2011 - 15:39h

Dá também para combinar a sua dica com FreeRapid [1] usando o crontab para acordar o aplicativo.

Ele faz exatamente o que você esta querendo, baixar partes de sites de downloads como megaupload, rapidshare entre ourtos.

Ele gerencia, espera o tempo certo entre os dwonloads. Inclusive ele consegue pausar os downloads apara continuar depois.



[1]http://wordrider.net/freerapid/download.html

[4] Comentário enviado por mrtuxys em 21/02/2011 - 19:01h

Muito obrigado Fábio, pelo seu complemento.

Obrigado a todos pelos comentários.

[5] Comentário enviado por mcnd2 em 21/02/2011 - 19:05h

Gostei.

Nunca usei o 'crontab' e pouquíssima vez o 'wget'.

Fica ai uma dica interessante para quando vicio em baixar músicas.

[6] Comentário enviado por mikemldo em 06/03/2011 - 08:34h

Outra forma é utilizar o comando sequencialmente com && no final. Ex.: "wget URL1 && wget URL2 && wget URL3"
Assim, somente após o término de um, o outro vai iniciar.

E, se quiser desligar o computador depois dos downloads, o último comando seria "&& shutdown now"

Abraços.

[7] Comentário enviado por mrtuxys em 08/03/2011 - 23:21h

Obrigado por sua contribuição mikemldo.




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts