segunda-feira, 31 de janeiro de 2011

Agendar Downloads

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.

Nenhum comentário:

Postar um comentário