Programar um download grande para reiniciar todos os dias em um período de tempo específico do dia?

1

Quero agendar um download grande para ocorrer à noite, entre as 00:00 e as 05:00. Todos os dias, a 12AM wget , você deve pegar automaticamente o local onde saiu na noite anterior e, às 5 da manhã, pausar o download automaticamente, para que possa retomar a noite seguinte.

Como posso fazer isso no Ubuntu? Quais ferramentas eu preciso?

    
por becko 12.09.2014 / 20:16

2 respostas

2

Uma combinação de um trabalho do Upstart e um trabalho cron :

Primeiro, crie um trabalho do Upstart. Crie um arquivo chamado ~/.config/upstart/my-download.conf contendo:

description "My download job."
start on resume-download
stop on stop-download

respawn
respawn limit 10 5

script   
     cd /path/to/download/folder
     wget --continue uri://link/to/download    
end script

Agora, adicione uma tarefa cron para iniciar e parar este trabalho do Upstart. Execute EDITOR=gedit crontab -e e adicione ao arquivo:

0 0 * * * /sbin/initctl emit resume-download
0 5 * * * /sbin/initctl emit stop-download

Você pode iniciar manualmente o download quando quiser usando:

initctl emit resume-download
# or
start my-download

E pare a qualquer momento usando:

initctl emit stop-download
# or
stop my-download
  1. Devido ao respawn no trabalho, o Upstart tentará reiniciar o wget se ele sair. Isso pode ser útil se expirar e sair às duas da manhã. Um limite é colocado para que não tenhamos o Upstart tentando iniciar o wget infinitamente (por exemplo, a rede está enfrentando problemas estendidos, o download foi concluído, etc.).
  2. Adicionamos initctl emit aos comandos no cron job. Desta forma, se criarmos mais trabalhos do tipo Upstart, todos eles começando neste evento, esta única entrada cron será suficiente para iniciar todos eles.
por muru 12.09.2014 / 21:06
0

Você vai querer usar o --continue sinalizador do wget e trabalhos agendados.

Você pode ter uma entrada cron para iniciar um script às 12h com o uso do tempo limite. Vejo link . Ou você pode executar outro script que mata / interrompe às 5 da manhã.

Exemplo para um script diário: 0 0 * * * timeout -s KILL 5h /path/to/command

O exemplo acima executará timeout em / path / to / command às 12:00 horas todos os dias de cada mês e enviará um sinal KILL após 5 horas.

É assim que uma tarefa do cron é apresentada:

minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday) /path/to/command

Um asterisco (*) pode ser usado para que todas as ocorrências (todas as horas, todos os dias da semana, todos os meses, etc.) de um período de tempo sejam usadas.

    
por jonvon 12.09.2014 / 20:45