Que tal usar um script simples para isso:
- Execute o script uma vez a cada 5 minutos, a menos que já esteja em execução.
- Verifique a idade do arquivo local. Se for mais antigo que um limite específico, faça o download novamente.
Então, se tudo for suave, nada acontece, a menos que um arquivo esteja desatualizado. Se um arquivo estiver desatualizado e falhar no download, você poderá tentar novamente na próxima Iteração.
Eu não tenho certeza porque você marcou isso com php
, mas se você está realmente executando um script PHP esta abordagem é bastante fácil de fazer (dado que você tem web sockets habilitados):
foreach($files as $file)
if (@filemdate($local_path + $file) + $cache_duration < time())
@copy($remote_path + $file, local_path + $file);
Observe que $remote_path
pode, de fato, ser um URL HTTP ou FTP. Não há necessidade de invocar o wget. O @
impedirá que mensagens de erro sejam impressas.
Para provar que isso não causará espera desnecessária:
- Suponha que você tenha 1000 arquivos para download, mas só pode fazer o download de até 250 arquivos por hora.
- Defina
cache_duration
para um tempo de salvamento onde você obterá todos os arquivos, como 24h (24 * 60 * 60
). - Execute novamente o script acima a cada hora.
- A primeira iteração dos primeiros 250 arquivos será atualizada. Os outros vão falhar.
- A segunda iteração dos primeiros 250 arquivos será ignorada (por ser recente o suficiente) e os próximos 250 arquivos serão baixados.
- Após a quarta iteração, você terá todos os 1000 arquivos atualizados / baixados.
- É claro que você pode definir um intervalo mais curto, como 5 minutos, mas isso criará muito mais solicitações / tráfego (depende se isso é aceitável).
Idéia alternativa de script:
- Tente baixar um arquivo.
- Se falhar, você poderá determinar isso com base no valor de retorno / código de saída do wget. Então, nesse caso, espere 5 minutos e repita.