Agendar downloads pelo terminal do Linux

Publicado por Osiel em 21/02/2011

[ Hits: 8.701 ]

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

Assistir os trailers de filmes no site da Apple pelo Firefox

Comos usuários leigos podem configurar seu proxy autenticado

Download do site como estático com wget

Instalando um Lucent WinModem no Linux com o kernel 2.6

Otimizando o squid: Abortando solicitações interrompidas

  

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